4

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

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

a) 用户选择确定。Settings->Notifications->MyApp 然后显示警报的完全权限,正如我所期望的那样。

或者

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

除了我的应用程序,我发现 BBC News 和 Ap Mobile 表现出相同的错误,而 Viber 没有(完全符合我的预期)。Ap Mobile 有这个错误的一个变种 - 如果我拒绝推送通知,则只有徽章打开,而不是声音和警报。

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

4

1 回答 1

2

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

如果用户在“xxx 想向您发送推送通知”中选择取消,则警报将在 Settings->Notifications->App Name 中关闭,除非

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

或 b) 在进行 registerForRemoteNotificationTypes: 之前调用了 setApplicationIconBadgeNumber:0 (未尝试其他号码),在这种情况下,只会打开徽章。可以说,如果我们实际设置了徽章编号,则启用徽章是合理的,因此这并不完全明显是一个错误而不是(未记录的)功能。

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

    // If remote notifications are already enabled, then clear any existing.
    if([[UIApplication sharedApplication] enabledRemoteNotificationTypes] != UIRemoteNotificationTypeNone)
    {
        [[UIApplication sharedApplication] cancelAllLocalNotifications];
        [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
    }
于 2013-09-08T20:02:05.850 回答