首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >iOS7和iOS8:如何检测用户对推送通知的请求是否为“否”?

iOS7和iOS8:如何检测用户对推送通知的请求是否为“否”?
EN

Stack Overflow用户
提问于 2018-04-10 01:36:37
回答 2查看 0关注 0票数 0

我正在构建一个针对iOS7和iOS8的应用程序。我要求用户有权发送推送通知。但出于某种原因,application:didFailToRegisterForRemoteNotificationsWithError如果我在询问推送权限时点击“否” ,iOS7和iOS8都不会调用我的处理程序。

我的问题:我怎么知道,在iOS7和iOS8上,当用户解除了对推送通知的请求时 - 我如何知道他们是否拒绝了请求?

我已经看了一堆StackOverflow的答案,并已实现他们的建议,但它没有按照文档工作:

  • iOS7:如果用户批准请求,系统确实会调用我的application:didRegisterForRemoteNotificationsWithDeviceToken:处理程序。所以我可以说他们批准了它。但是,如果用户拒绝请求,那么我不会收到回复application:didFailToRegisterForRemoteNotificationsWithError。这看起来像一个错误,我不知道用户拒绝了这个请求。
  • iOS8:如果用户批准或拒绝请求,系统确实会调用我的application:didRegisterUserNotificationSettings处理程序。我可以查看notificationSettings参数以查看用户是否批准了我的请求,因此很方便。如果我随后调用let settings = UIApplication.sharedApplication().currentUserNotificationSettings(),我可以检查settings.types是否允许警报。所以对于iOS8来说,它看起来就像我全部设置了。

我使用NSUserDefaults布尔值来跟踪我是否已经要求用户授予权限。

我正在使用硬件设备进行测试(使用iOS7的iPhone 4S和使用iOS8的iPhone 5),而不是模拟器。

在每次测试后重置设备,以使其再次显示请求警报。

以下是我注册推送通知的方式。该if分支采用iOS8,else分支采用iOS7:

代码语言:javascript
复制
    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())。

EN

回答 2

Stack Overflow用户

发布于 2018-04-10 09:58:25

didFailToRegisterForRemoteNotificationsWithError方法未被调用,因为注册没有失败 - 甚至从未尝试过,因为用户拒绝了请求。

在iOS7上,你可以做几件事情:

  1. 假设远程通知在didRegisterForRemoteNotificationsWithDeviceToken调用之前不可用
  2. 检查对象enabledRemoteNotificationTypes上的值UIApplication
票数 0
EN

Stack Overflow用户

发布于 2018-04-10 10:54:36

我试图找到解决这个问题的方法。

当显示推送通知许可UIAlert时,它会显示在我的应用程序外部。一旦用户选择“不允许”或“确定”,我的应用程序将再次变为活动状态。

我有一个视图控制器,在提示用户获得推送权限之前呈现。在这个视图控制器我听UIApplicationDidBecomeActiveNotification,然后关闭我的视图控制器。

这一直工作得很好,而我见过的其他所有解决方案都不适合我。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100008038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档