Check whether user notifications are enabled after UILocalNotification deprecation

好久不见. 提交于 2019-12-22 03:43:36

问题


In my app, I want to be able to check if the user has notifications enabled or not. In iOS 10, I did this using a check in the delegate.

This check is now deprecated and I want to update it, but I can't figure out what to use in iOS 11.

The deprecation warning is as follows:

currentUserNotificationSettings' was deprecated in iOS 10.0: Use UserNotifications Framework's -[UNUserNotificationCenter getNotificationSettingsWithCompletionHandler:] and -[UNUserNotificationCenter getNotificationCategoriesWithCompletionHandler:]

I've tried to update the code with the help of this warning but I can't figure it out.

If anyone can suggest anyway to get a check like this working it would help a lot. The code I have been using for iOS 10 is below, thanks.

let notificationType = UIApplication.shared.currentUserNotificationSettings!.types
if notificationType == [] {
    print("Notifications are NOT enabled")
} else {
    print("Notifications are enabled")
}

回答1:


Step 1 : import UserNotifications

Step 2 :

UNUserNotificationCenter.current().getNotificationSettings { (settings) in
  if settings.authorizationStatus == .authorized {
    // Notifications are allowed
  }
  else {
    // Either denied or notDetermined
  }
}

Inspect the settings object for more informations.




回答2:


First step:- You have to add header file as

import UserNotifications

I have used checkpushNotification method to check whether user enable notification or not. Uses called this method from didFinishLaunchingWithOptions of AppDelegate class. Hope It will help you, If any problem then comment below.

Last step:-

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

                switch setttings.authorizationStatus{
                case .authorized:

                    print("enabled notification setting")

                case .denied:

                    print("setting has been disabled")

                case .notDetermined:
                    print("something vital went wrong here")
                }
            }
        } else {

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

                print("enabled notification setting")
            }else{

                print("setting has been disabled")
            }
        }
    }

And if you want certain boolean output for is enabled or disabled then you should implement completion handler to solve it.

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)
            }
        }
    }

and Call this simple as

  self.checkPushNotification {  (isEnable) in
    print(isEnable)
    // you know notification status.
}



回答3:


I think you can just call UIApplication.shared.isRegisteredForRemoteNotifications



来源:https://stackoverflow.com/questions/46664177/check-whether-user-notifications-are-enabled-after-uilocalnotification-deprecati

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!