Bri*_*rty 17 push-notification apple-push-notifications ios ios7 swift
我正在构建一个针对iOS7和iOS8的应用程序.我要求用户发送推送通知的权限.但出于某种原因,application:didFailToRegisterForRemoteNotificationsWithError如果我在被要求获得推送权限时单击"否" ,iOS7和iOS8都不会调用我的处理程序.
我的问题:我在iOS7和iOS8上如何知道用户何时驳回了推送通知的请求 - 我怎么知道他们是否拒绝了请求?
我已经查看了一堆StackOverflow答案,并已实现了他们的建议,但它没有按照记录的方式工作:
application:didRegisterForRemoteNotificationsWithDeviceToken:处理程序.所以我可以告诉他们批准了它.但是如果用户拒绝请求,那么我就不会收到回调application:didFailToRegisterForRemoteNotificationsWithError.这似乎是一个错误,我不能告诉用户拒绝了该请求.application:didRegisterUserNotificationSettings处理程序.我可以查看notificationSettings参数以查看用户是否批准或拒绝了我的请求,这样很方便.isRegisteredForRemoteNotifications()(例如,当应用程序稍后变为活动状态时),它始终返回true - 即使用户已拒绝该请求.所以我得到了误报.这似乎是一个错误,我看到其他人也注意到了这一点.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)
}
Run Code Online (Sandbox Code Playgroud)
(在iOS8中,当application:didRegisterUserNotificationSettings:被调用时,我随后调用application.registerForRemoteNotifications()).
我试图找到绕过同样问题的方法.
当显示推送通知权限UIAlert时,它会从我的应用程序外部显示.一旦用户选择"不允许"或"确定",我的应用程序将再次变为活动状态.
在提示用户输入推送权限之前,我有一个视图控制器.在这个视图控制器中我监听UIApplicationDidBecomeActiveNotification,然后关闭我的视图控制器.
这一直很好,而我见过的所有其他解决方案根本不适用于我.
您的didFailToRegisterForRemoteNotificationsWithError方法未被调用,因为注册没有失败 - 甚至从未尝试过,因为用户拒绝了请求.
在iOS7上,您可以做以下几件事:
didRegisterForRemoteNotificationsWithDeviceToken在调用之前远程通知不可用enabledRemoteNotificationTypes上的值UIApplication| 归档时间: |
|
| 查看次数: |
9248 次 |
| 最近记录: |