iOS Swift 检查用户是否打开推送权限

iOS10及以上:

用户是否打开推送开关的判断很简单,就是UNNotificationSettings的authorizationStatus
notDetermined就是用户还没有点,
denied就是用户点了不同意,
authorized就是用户点了同意。
注意,如果是notDetermined,那设置里面都不会有通知设置这个选项

iOS8及iOS9:

通过UIApplication.shared.currentUserNotificationSettings判断。

注意:
还有个UIApplication.shared.isRegisteredForRemoteNotifications属性,这个属性判断的是当前设备是否获取device token并且注册到APNS服务器,并不能用来判断用户是否打开推送权限。

所以统一的判断方法如下:

func checkPushNotification(checkNotificationStatus isEnable : ((Bool)->())? = nil){

        if #available(iOS 10.0, *) {
            UNUserNotificationCenter.current().getNotificationSettings(){ (setttings) in

                switch setttings.authorizationStatus{
                case .authorized:

                    print("enabled notification setting")
                    isEnable?(true)
                case .denied:

                    print("setting has been disabled")
                    isEnable?(false)
                case .notDetermined:

                    print("something vital went wrong here")
                    isEnable?(false)
                }
            }
        } else {

            let isNotificationEnabled = UIApplication.shared.currentUserNotificationSettings?.types.contains(UIUserNotificationType.alert)
            if isNotificationEnabled == true{

                print("enabled notification setting")
                isEnable?(true)

            }else{

                print("setting has been disabled")
                isEnable?(false)
            }
        }
    }

你可能感兴趣的:(iOS Swift 检查用户是否打开推送权限)