4

当我第一次打电话registerForRemoteNotificationTypesUIApplication,用户会收到有关允许此应用程序向他们发送推送通知的系统提示。如果他们说是,那么didRegisterForRemoteNotificationsWithDeviceToken就会调用我的应用程序委托。如果他们说不,didFailToRegisterForRemoteNotificationsWithError不会被调用。一旦他们对最初的提示说不,当我将来尝试重新注册时,我就再也不会收到任何回电了。

这是标准行为吗?知道他们何时拒绝该提示的最佳方式是什么? Apple 在这方面的文档并没有说明任何关于这种情况的有用信息。

4

1 回答 1

14

用户决定选择哪个选项不会影响使用哪个回调。如果用户说“否”,您仍然会成功获得用户的设备令牌。您仍然可以向此设备发送推送通知,Apple 的反馈服务会报告它们已送达(这意味着反馈服务不会告诉您他们已取消订阅)。推送“否”的唯一效果是“隐藏”针对特定应用发送到设备的推送通知。

由于此设计决策,用户可以通过转到设置 -> 通知来撤销此决策,并为您的应用重新启用推送通知并接收推送通知,而无需从您的应用或操作系统进行任何特殊的重新注册逻辑。

编辑(iOS7):在 iOS 5 上注意到了这种行为。当我在 iOS 7 上再次测试时,我在按下“不允许”后没有收到设备令牌。只有在我访问设置 > 通知 > MyApp 并启用通知后,我才获得设备令牌。

编辑(iOS8):在 iOS 8 中,通知设置与远程通知分开,但行为类似于 iOS 7。在您的应用程序授权通知之前,您似乎不会获得设备令牌。我正在测试的应用程序没有启用远程通知后台模式功能,但如果您的应用程序确实启用了该功能,即使未启用通知,您也可以获得设备令牌。(我很难对此进行测试,因为尝试让该通知提示再次出现非常痛苦。)

于 2013-03-02T00:35:34.347 回答