ios – 在“推送通知权限”对话框中选择“取消”后,设置显示通知警报为“开”

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

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

a)用户选择OK.设置 – >通知 – > MyApp会显示警报的完全权限,正如我所料.

要么

b)这就是BUG用户选择取消.我希望设置 – >通知 – > MyApp将应用程序显示为不在通知中心,并关闭所有权限.然而,情况正好相反 – 对于他们确定对话框的情况没有区别!

除了我的申请,我发现BBC新闻和Ap Mobile都出现了同样的错误,而Viber却没有(完全符合我的预期). Ap Mobile有这个错误的变种 – 如果我拒绝推送通知,只有徽章打开,而不是声音和警报.

我正在重置推送设置的状态,通过恢复到运行应用程序之前的备份,按照TN2265.

最佳答案 经过无限的恢复和测试,我发现了以下内容.

如果用户在“xxx希望向您发送推送通知”中选择“取消”,则会在“设置” – >“通知” – >“应用名称”中关闭提醒,除非

a)在registerForRemoteNotificationTypes:之前调用cancelAllLocalNotifications,在这种情况下,所有警报都将打开.这感觉就像一个苹果虫.

或者b)调用setApplicationIconBadgeNumber:0(没有尝试其他数字)是在registerForRemoteNotificationTypes:之前做出的,在这种情况下只会打开徽章.可以说,如果我们实际设置了徽章编号,那么启用徽章是合理的,因此这不是一个错误,而是一个(未记录的)功能.

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

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