实施iOS紧急警报
iOS 12已添加严重警报功能。 该功能使应用程序可以发送严重警报,即使打开了“请勿打扰”或iPhone处于静音状态,它们也会播放声音。 并非所有应用程序都可以发送严重警报。 仅允许获得严重警报授权的应用程序才能发送严重警报。 在Apple的WWDC 2018上,有一个关于用户通知改进的演讲,其中还讨论了关键警报。 紧急警报授权请求应该在https://developer.apple.com/contact/request/notifications-critical-alerts-entitlement/提交。 紧急警报功能请求需要提交以下信息。
Apple将对其进行审核并根据所提交的信息批准该请求。 批准看起来像
批准后,我们需要在开发者帐户上生成一个新的配置文件,并为该应用程序ID启用严重警报权限。
下载并安装手动生成的配置文件。 从现在开始,您应该开始在Xcode中使用新的配置文件。
只是在Xcode中更改配置文件对我来说不起作用。 我必须在我的应用授权文件中添加严重警报的授权。
这就是所有需要的设置。 跳转至代码,应请求针对通知的新的严重警报授权。
var authOptions:UNAuthorizationOptions?
如果#available(iOS 12.0,*) {
authOptions = [.alert,.badge,.sound, .criticalAlert ]
}其他{
authOptions = [.alert,.badge,.sound]
}
UNUserNotificationCenter.current()。requestAuthorization(选项:
authOptions!){(已授予,错误)在
如果!grant {
打印(“该应用程序需要“通知”权限才能
显示推送通知。 请在设置中启用它。”)
}
}
新的严重警报授权要求用户提供严重警报通知批准。
在apns消息有效负载中添加声音字典将在设备上生成严重警报。
{
“ aps”:{
“声音”:{
“关键”:1,
“名称”:“ critical-alert-sound.wav”,
“体积”:1.0
}
}
}
具有旧版FCM的严重警报:
旧版FCM服务器协议消息有效负载仅支持iOS声音键作为字符串。 它不支持声音字典。 因此,我必须提供一种变通方法来使用旧版FCM实施关键警报功能。
我的应用程序已经在使用iOS Notification Extension。 通知扩展可以在通知消息显示给用户之前对其进行修改。 我们的服务器会加密推送通知有效负载,iOS应用程序中的Notification Extension会在向用户显示通知之前解密推送通知数据。 这样,我们就能实现端到端加密的推送通知。
解决方法是在将通知显示给用户之前,依靠iOS Notification Extension将推送通知标记为关键。 服务器在FCM消息的数据部分中发送设置为1的critical
标志。 通知扩展检查推送通知有效负载中的关键标志,如果将其设置为1,则将通知标记为关键。通知扩展将推送通知标记为关键的代码在我的流程汇总中。