ios - 在推送通知权限对话框中选择取消后,设置显示通知警报已开启

标签 ios ios6 push-notification apple-push-notifications

请注意,此问题适用于 iOS 6,这是我提出问题时 iOS 的最高生产版本。我没有对更高版本的 iOS 进行后续测试,情况很可能已经发生变化。如果您在更高版本的操作系统上观察到相同的行为,请发表评论!

我的应用注册了推送通知。出现权限对话框(“MyApp 希望向您发送推送通知”)。有两种可能的流程:

a) 用户选择确定。 Settings->Notifications->MyApp 然后显示警报的完整权限,如我所料。

b) 这是错误 用户选择取消。我希望设置-> 通知-> MyApp 显示该应用程序不在通知中心,并关闭所有权限。然而,事实恰恰相反 - 与他们确定对话框的情况没有区别!

除了我的应用程序之外,我还发现 BBC News 和 Ap Mobile 存在相同的错误,而 Viber 则没有(工作完全符合我的预期)。 Ap Mobile 有这个错误的变体 - 如果我拒绝推送通知,只有角标(Badge)打开,而不是声音和警报。

根据 TN2265,我正在通过恢复到运行应用程序之前所做的备份来重置推送设置的状态。 .

最佳答案

经过无数次恢复和测试,我发现了以下内容。

如果用户在“xxx would like to send you push notifications”中选择Cancel,那么在Settings->Notifications->App Name中将关闭提醒,除非

a) 在 registerForRemoteNotificationTypes: 之前调用了 cancelAllLocalNotifications,在这种情况下,所有警报都将打开。这感觉就像一个 Apple 错误。

或 b) 在 registerForRemoteNotificationTypes: 之前调用了 setApplicationIconBadgeNumber:0(没有尝试其他数字),在这种情况下,只有角标(Badge)会打开。可以说,如果我们实际设置角标(Badge)编号,启用角标(Badge)是合理的,所以这不是一个错误而不是(未记录的)功能并不完全明显。

此错误/功能的解决方法是在触摸之前检查推送是否已启用。

    // If remote notifications are already enabled, then clear any existing.
    if([[UIApplication sharedApplication] enabledRemoteNotificationTypes] != UIRemoteNotificationTypeNone)
    {
        [[UIApplication sharedApplication] cancelAllLocalNotifications];
        [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
    }

关于ios - 在推送通知权限对话框中选择取消后,设置显示通知警报已开启,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18678506/

相关文章:

ios - super View 中的中心 View

objective-c - 从屏幕外响应丢失动画对象

cordova - 在 iOS 6 上,PhoneGap 2.1 iPad 应用程序不再自动旋转

android - 通过我的网站向特定的安卓设备发送通知

push-notification - 跨主要浏览器和移动设备发送和接收推送通知

iphone - 是否有任何 sdk 或套件可以在 iOS 中处理 Microsoft Office 格式?

iphone - 使用加速度计测量小距离 - iOS

iphone - 提交到AppStore时如何确定iPhone/iPad目标和iOS版本?

android - c2dm 设备自动注销

ios - MFMessageComposeViewController 在发送消息 ios9 后不返回应用程序