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

gkl*_*lka 8 objective-c push-notification apple-push-notifications ios ios8

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

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

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

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

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

Jas*_*per 6

[[UIApplication sharedApplication] isRegisteredForRemoteNotifications];
Run Code Online (Sandbox Code Playgroud)

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

声明SWIFT func isRegisteredForRemoteNotifications() - > Bool OBJECTIVE-C - (BOOL)isRegisteredForRemoteNotifications返回值如果应用程序已注册远程通知并收到其设备令牌,则返回值;如果未发生注册,失败或已被拒绝,则返回NO用户.

讨论此方法仅反映在您调用registerForRemoteNotifications方法时开始的远程注册过程的成功完成.此方法无法反映推送通知是否因连接问题而实际可用.此方法返回的值考虑了用户接收推送通知的首选项.

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

链接到Apple Doc's

我会向Apple提交一份错误报告.

  • 你没仔细看过我的问题.无论用户打开还是关闭通知,此方法始终为我返回"是". (2认同)