检查推送是不是要求通知权限

Posted

技术标签:

【中文标题】检查推送是不是要求通知权限【英文标题】:Check Push if notification permission asked or not检查推送是否要求通知权限 【发布时间】:2018-04-05 11:27:04 【问题描述】:

我已经看过Determine on iPhone if user has enabled push notifications

但我的问题有些不同。如果用户拒绝推送通知权限,我需要显示“导航到设置”屏幕。我们如何检查之前是否询问过推送权限? if #available(ios 10.0, *) 工作正常,它能够获取所有 status,但对于早期版本,我无法弄清楚。

我有以下代码:

    NotificationCenter.default.addObserver(forName: NSNotification.Name.UIApplicationDidBecomeActive, object: nil, queue: .main) [weak self] (notificaiont) in
        guard let strongSelf = self  else return 

        if #available(iOS 10.0, *) 
            let current = UNUserNotificationCenter.current()
            current.getNotificationSettings(completionHandler: settings in

                switch settings.authorizationStatus 
                case .notDetermined:
                    AppDelegate.sharedDelegate.registerForPush()
                case .denied:
                    AppDelegate.sharedDelegate.navigateUesrToSettings(withMessage: "Allow app to send notifications")
                case .authorized:
                    strongSelf.dismiss(animated: true, completion: nil)
                    break
                
            )
         else 
            // Fallback on earlier versions
            if UIApplication.shared.isRegisteredForRemoteNotifications 
                strongSelf.dismiss(animated: true, completion: nil)
             else 
                //what should i call here  registerForPush for navigate to setting ?
               // AppDelegate.sharedDelegate.registerForPush()
                AppDelegate.sharedDelegate.navigateUesrToSettings(withMessage: "Allow app to send notifications")

            
        
    

// Fallback on earlier versions的else部分我很困惑,我需要打电话吗

AppDelegate.sharedDelegate.registerForPush()

AppDelegate.sharedDelegate.navigateUesrToSettings(withMessage: "Allow app to send notifications")

?谢谢!

【问题讨论】:

【参考方案1】:

您必须自己存储它,例如在用户默认值中。提示用户权限时,将标志设置为true;像这样:

if UIApplication.shared.isRegisteredForRemoteNotifications 
  // equivalent to .authorized case

else if !UserDefaults.standard.bool(forKey: "didAskForPushPermission") 

  // equivalent to .notDetermined case
  UserDefaults.standard.set(true, forKey: "didAskForPushPermission")

else 
  // equivalent to .denied case

【讨论】:

以上是关于检查推送是不是要求通知权限的主要内容,如果未能解决你的问题,请参考以下文章

检查用户是不是在代号中接受了 iOS 中的推送通知权限

有没有办法检查是不是请求过推送通知设置?

未确定推送通知

Android推送通知权限判断及跳转到权限设置界面(完善兼容8.0)

网络推送通知的权限更改是不是有任何回调?

了解过去是不是在 iOS 上显示过推送通知权限提示