Check whether user notifications are enabled after UILocalNotification deprecation

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

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.


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