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

时间:2014-07-29 14:08:34

标签: ios objective-c ios8 push-notification apple-push-notifications

我开发了一个应用程序,它围绕推送通知构建。仅当用户到达注册过程的某个点时,应用才会请求通知权限。我已经成功完成了以下工作:

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

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

其他信息,iOS 8的-isRegisteredForRemoteNotifications也会返回YES。 (我没有测试,但假设-enabledNotificationTypes适用于iOS 7。)

如何检测此方案并向用户显示请求者,要求他在“设置”中重新启用通知?

1 个答案:

答案 0 :(得分:6)

[[UIApplication sharedApplication] isRegisteredForRemoteNotifications];
  

返回一个布尔值,指示该应用当前是否已注册   用于远程通知。

     

声明SWIFT func isRegisteredForRemoteNotifications() - >布尔   Objective-C的    - (BOOL)isRegisteredForRemoteNotifications如果应用程序已注册远程通知并收到其设备令牌,则返回值YES   如果没有发生注册,失败或被拒绝,则为“否”   由用户。

     

讨论此方法仅反映成功完成   远程注册过程,从你打电话开始   registerForRemoteNotifications方法。这种方法没有反映出来   推送通知是否因连接而实际可用   的问题。 此方法返回的值会考虑到   用户接收推送通知的首选项。

     

可用性适用于iOS 8.0及更高版本。

Link to Apple Doc's

我会向Apple提交错误报告。