请注意,此问题适用于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];
}