Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 延迟推送通知并检查用户是否启用了它_Ios_Objective C_Ios8_Push Notification_Apple Push Notifications - Fatal编程技术网

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上调用
    -registerforremotentificationtypes:
    ,在iOS 8上调用
    -registerUserNotificationSettings:
除非用户已启用推送通知,然后在稍后的设置中禁用它们,否则此操作正常。在本例中,我尝试在启动时重新注册Push,它既不调用
-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,因此我无法决定是尝试注册还是向用户显示指向设置的链接。这是一个棘手的用例。