我正在构建一个针对iOS7和iOS8的应用程序。我要求用户有权发送推送通知。但出于某种原因,application:didFailToRegisterForRemoteNotificationsWithError
如果我在询问推送权限时点击“否” ,iOS7和iOS8都不会调用我的处理程序。
我的问题:我怎么知道,在iOS7和iOS8上,当用户解除了对推送通知的请求时 - 我如何知道他们是否拒绝了请求?
我已经看了一堆StackOverflow的答案,并已实现他们的建议,但它没有按照文档工作:
application:didRegisterForRemoteNotificationsWithDeviceToken:
处理程序。所以我可以说他们批准了它。但是,如果用户拒绝请求,那么我不会收到回复application:didFailToRegisterForRemoteNotificationsWithError
。这看起来像一个错误,我不知道用户拒绝了这个请求。application:didRegisterUserNotificationSettings
处理程序。我可以查看notificationSettings
参数以查看用户是否批准了我的请求,因此很方便。如果我随后调用let settings = UIApplication.sharedApplication().currentUserNotificationSettings()
,我可以检查settings.types
是否允许警报。所以对于iOS8来说,它看起来就像我全部设置了。我使用NSUserDefaults
布尔值来跟踪我是否已经要求用户授予权限。
我正在使用硬件设备进行测试(使用iOS7的iPhone 4S和使用iOS8的iPhone 5),而不是模拟器。
我在每次测试后重置设备,以使其再次显示请求警报。
以下是我注册推送通知的方式。该if
分支采用iOS8,else
分支采用iOS7:
let application = UIApplication.sharedApplication()
if (application.respondsToSelector("registerUserNotificationSettings:")) {
let settings = UIUserNotificationSettings(forTypes: .Badge | .Alert | .Sound,
categories: nil )
application.registerUserNotificationSettings(settings)
} else {
application.registerForRemoteNotificationTypes(.Badge | .Alert | .Sound)
}
(在iOS8中,当application:didRegisterUserNotificationSettings:
被调用时,然后我调用application.registerForRemoteNotifications()
)。
发布于 2018-04-10 09:58:25
didFailToRegisterForRemoteNotificationsWithError
方法未被调用,因为注册没有失败 - 甚至从未尝试过,因为用户拒绝了请求。
在iOS7上,你可以做几件事情:
didRegisterForRemoteNotificationsWithDeviceToken
调用之前不可用enabledRemoteNotificationTypes
上的值UIApplication
发布于 2018-04-10 10:54:36
我试图找到解决这个问题的方法。
当显示推送通知许可UIAlert时,它会显示在我的应用程序外部。一旦用户选择“不允许”或“确定”,我的应用程序将再次变为活动状态。
我有一个视图控制器,在提示用户获得推送权限之前呈现。在这个视图控制器我听UIApplicationDidBecomeActiveNotification
,然后关闭我的视图控制器。
这一直工作得很好,而我见过的其他所有解决方案都不适合我。
https://stackoverflow.com/questions/-100008038
复制相似问题