已经拥有静默推送通知后的正常推送通知权限

Posted

技术标签:

【中文标题】已经拥有静默推送通知后的正常推送通知权限【英文标题】:Normal Push Notification Permissions after already having Silent Push Notifications 【发布时间】:2020-03-25 01:01:06 【问题描述】:

我有一个应用程序已经收到静默推送通知一段时间了。我现在需要添加将显示在用户通知中心并作为横幅的普通推送通知。

最初,我所做的只是注册推送通知而不请求授权(因为静默通知不需要授权):

UIApplication.shared.registerForRemoteNotifications()

现在的问题是,当我像这样请求授权时,没有提示授予或拒绝通知权限:

UNUserNotificationCenter.current().requestAuthorization(options: options)  granted, error in
    // Handle response

我会认为,因为我以前从未调用过requestAuthorization,所以会有提示。但是好像因为设备过去已经注册了(静默)通知,所以不会有任何提示。

我的推理是否正确?我现在唯一的选择是展示我自己的模式并指导用户在设置中手动启用通知吗?

【问题讨论】:

【参考方案1】:

我已经在我的应用中检查了这个,我已经删除了对

的调用
UNUserNotificationCenter.current().requestAuthorization(options: options)  granted, error in
    // Handle response

在此之后(全新安装)并且只调用了 registerForRemoteNotifications,我得到了通知令牌,没有提示和通知消息,并且无法显示徽章。

然后我恢复了 requestAuthorization 调用,运行应用程序并出现了提示。所以这表明你错了,你必须在第一次 requestAuthorization 调用后看到提示。

我的猜测是你已经同意了提示。 检查手机设置->“YourApp”->通知。 如果您已经同意 - 那里会有信息。

尝试卸载应用程序并再次检查是否出现提示。

【讨论】:

知道我必须在过去的某个时间点请求过授权是很有帮助的(我可能已经忘记了 - 完全有可能),但卸载后我仍然没有收到提示。我在其他地方读到过,您需要在状态重置之前将应用程序删除 24 小时,但这取决于 ios 版本。目前还不清楚苹果是如何保留这些信息的,我还没有找到任何明确的答案。

以上是关于已经拥有静默推送通知后的正常推送通知权限的主要内容,如果未能解决你的问题,请参考以下文章

使用firebase发送静默推送通知,以便在应用程序被杀死时唤醒它

静默推送通知不起作用

iOS 9-10 静默推送通知的 JSON 结构

仅接收来自 GCM 的最后一个后台静默推送通知

iOS - 我需要静默推送后的处理时间

iOS VoIP 推送负载是不是类似于静默通知的负载?