Xamarin.iOS 中的关键警报

在 iOS 12 中,应用可以发送关键警报。 无论“请勿打扰”是处于启用状态还是响铃开关处于关闭状态,关键警报都会播放声音。 这些通知是中断性的,仅当用户必须立即采取措施时才应使用。

自定义关键警报权利

若要在应用中显示关键警报,请先从 Apple 请求自定义关键警报通知权利

从 Apple 收到此权利并遵循有关如何配置应用以使用它的任何关联说明后,将自定义权利添加到应用的 Entitlements.plist 文件中。 然后,配置“iOS 捆绑签名”选项,以便在模拟器和设备上对应用进行签名时使用 Entitlements.plist

请求授权

应用的通知授权请求会提示用户允许或禁止应用通知。 如果通知授权请求是请求发送关键警报权限,用户还可以在应用中选择加入关键警报。

以下代码请求发送关键警报和标准通知权限并发出声音,具体方法是将适当的 UNAuthorizationOptions 值传递到 RequestAuthorization

public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
{
    UNUserNotificationCenter center = UNUserNotificationCenter.Current;
    var options = UNAuthorizationOptions.Alert | UNAuthorizationOptions.Sound | UNAuthorizationOptions.CriticalAlert;
    center.RequestAuthorization(options, (bool success, NSError error) => {
        // ...
    );
    return true;
}

本地关键警报

若要发送本地关键警报,请创建 UNMutableNotificationContent 并将其 Sound 属性设置为以下任一值:

  • UNNotificationSound.DefaultCriticalSound,使用默认的关键通知声音。
  • UNNotificationSound.GetCriticalSound,允许指定与应用和音量捆绑在一起的自定义声音。

然后,从通知内容创建一个 UNNotificationRequest 并将其添加到通知中心:

var content = new UNMutableNotificationContent()
{
    Title = "Critical alert title",
    Body = "Text of the critical alert",
    CategoryIdentifier = "my-critical-alert-category",
    // Sound = UNNotificationSound.DefaultCriticalSound
    Sound = UNNotificationSound.GetCriticalSound("my_critical_sound.m4a", 1.0f)
};

var request = UNNotificationRequest.FromIdentifier(
    Guid.NewGuid().ToString(),
    content,
    UNTimeIntervalNotificationTrigger.CreateTrigger(3, false)
);

var center = UNUserNotificationCenter.Current;
center.AddNotificationRequest(request, null);

重要

如果未为应用启用关键警报,则不会传递关键警报。 除了应用首次请求发送关键警报权限的提示之外,用户还可以在 iOS“设置”应用的应用“通知”部分中启用或禁用关键警报

远程关键警报

有关远程关键警报的信息,请参阅 WWDC 2018 中的用户通知中的新增功能会话和生成远程通知文档。