Ios 延迟推送通知并检查用户是否启用了它
我开发了一个应用程序,它围绕推送通知构建自己。只有当用户达到注册过程的某个点时,应用程序才会请求通知权限。我已经做到了以下几点:Ios 延迟推送通知并检查用户是否启用了它,ios,objective-c,ios8,push-notification,apple-push-notifications,Ios,Objective C,Ios8,Push Notification,Apple Push Notifications,我开发了一个应用程序,它围绕推送通知构建自己。只有当用户达到注册过程的某个点时,应用程序才会请求通知权限。我已经做到了以下几点: 应用程序维护一个NSUserDefaults变量,该变量指示是否需要在启动时注册推送(默认情况下:不) 当注册到达该点时,我翻转变量并在iOS 7上调用-registerforremotentificationtypes:,在iOS 8上调用-registerUserNotificationSettings: 除非用户已启用推送通知,然后在稍后的设置中禁用它们,否
- 应用程序维护一个
变量,该变量指示是否需要在启动时注册推送(默认情况下:不)NSUserDefaults
- 当注册到达该点时,我翻转变量并在iOS 7上调用
,在iOS 8上调用-registerforremotentificationtypes:
-registerUserNotificationSettings:
-application:didRegisterForRemoteNotificationsWithDeviceToken
,也不调用-application:didFailToRegisterForRemoteNotificationsWithError
其他信息,即iOS 8的-isRegisteredForRemoteNotifications
也返回YES
。(我没有测试,但假设-enabledNotificationTypes
可以在iOS 7上运行。)
如何检测此场景并向用户显示请求者,请求他在设置中重新启用通知
[[UIApplication sharedApplication] isRegisteredForRemoteNotifications];
返回一个布尔值,指示应用程序当前是否已注册
用于远程通知
声明SWIFT func isRegisteredForRemoteNotifications()->Bool
目标-C
-(BOOL)isRegisteredForRemoteNotifications如果应用已注册远程通知并收到其设备令牌,则返回值YES
如果注册未发生、失败或被拒绝,则为否
由用户提供
讨论此方法仅反映了成功完成
当您调用
RegisterForRemotonifications方法。此方法不反映
推送通知是否由于连接性而实际可用
问题此方法返回的值考虑了
用户接收推送通知的首选项。
iOS 8.0及更高版本提供了可用性
我会在苹果公司提交一份bug报告。谢谢。此代码仅在iOS 8之前有效,因为
-enabledRemoteNotificationTypes
现在已被弃用。我的另一个问题是什么时候需要调用这个代码?如果我在-application:didfishlaunchingwithoptions:
中调用它,那么它会在调用我的推注册委托方法(didRegister
/failedToRegister
)之前运行。我认为使用计时器也不行。我也无法将它放入didRegister
,因为它可能根本不会被调用。请检查我对iOS8的编辑,您可以随时启动您正在检查的方法。在您的主UIViewController f.e.中,您确定他们应该注册PNE,但您没有仔细阅读我的问题。不管用户打开或关闭通知,这个方法总是为我返回YES
。你是对的,我一开始没有看到iOS8问题。但是,根据文档,在返回其值时,它应该考虑用户的首选项。我也看到了这个问题,它确实似乎是一个bug。@gklka您解决了这个问题吗?我也面临着这个问题。@anoop4real,我也遇到了这个问题,这就是我为解决这个问题所做的:@ewinnnn谢谢你的帮助,现在我知道了实现这个目标的原因。我在这里的目的是找出设置是由用户手动关闭的,还是设置从未出现过,因此我需要执行某些操作。NotificationTypes在这两种情况下都将返回None,因此我无法决定是尝试注册还是向用户显示指向设置的链接。这是一个棘手的用例。