延迟推送通知,并检查用户是否启用它

我开发了一个应用程序,围绕推送通知构build。 仅当用户到达注册过程的某个点时,应用才会请求通知权限。 我已经设法做到以下几点:

  • 该应用程序维护一个NSUserDefaultsvariables,该variables指示是否需要在启动时注册为推送(默认情况下:不)
  • 当注册到达那个点时,我翻转variables并调用-registerForRemoteNotificationTypes:在iOS 7上和-registerUserNotificationSettings:在iOS 8上

这工作正常,除非用户已经启用推送通知,然后在设置中稍后禁用它们。 在这种情况下,我尝试在启动时重新注册Push,它不会调用-application:didRegisterForRemoteNotificationsWithDeviceToken-application:didFailToRegisterForRemoteNotificationsWithError

额外的信息,iOS 8的-isRegisteredForRemoteNotifications也返回YES 。 (我没有testing,但是假设-enabledNotificationTypes适用于iOS 7)

我怎样才能检测到这种情况,并向用户提供一个请求者,要求他在设置中重新启用通知?

 [[UIApplication sharedApplication] isRegisteredForRemoteNotifications]; 

返回一个布尔值,指示当前是否为远程通知注册了应用程序。

声明SWIFT func isRegisteredForRemoteNotifications() – > Bool OBJECTIVE-C – (BOOL)isRegisteredForRemoteNotifications返回值如果应用程序注册了远程通知并收到设备标记,或者如果注册没有发生,失败或已被拒绝用户。

讨论此方法仅反映在调用registerForRemoteNotifications方法时开始的远程注册过程的成功完成。 由于连接问题,此方法不反映推送通知是否实际可用。 此方法返回的值考虑了用户接收推送通知的偏好。

可用性iOS 8.0及更高版本中提供。

链接到苹果文件的

我会在苹果提交一个错误报告。