iospush-notificationswift3ios10unusernotificationcenter

Registering for Push Notifications in Xcode 8/Swift 3.0?


I'm trying to get my app working in Xcode 8.0, and am running into an error. I know this code worked fine in previous versions of swift, but I'm assuming the code for this is changed in the new version. Here's the code I'm trying to run:

let settings = UIUserNotificationSettings(forTypes: [.Sound, .Alert, .Badge], categories: nil)     
UIApplication.sharedApplication().registerUserNotificationSettings(settings)
UIApplication.shared().registerForRemoteNotifications()

The error that I'm getting is "Argument labels '(forTypes:, categories:)' do not match any available overloads"

Is there a different command that I could try to get this working?


Solution

  • Import the UserNotifications framework and add the UNUserNotificationCenterDelegate in AppDelegate.swift

    Request user permission

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    
    
            let center = UNUserNotificationCenter.current()
            center.requestAuthorization(options:[.badge, .alert, .sound]) { (granted, error) in
                // Enable or disable features based on authorization.
            }
            application.registerForRemoteNotifications()
            return true
    }
    

    Getting device token

    func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    
        let deviceTokenString = deviceToken.reduce("", {$0 + String(format: "%02X", $1)})
        print(deviceTokenString)
    }
    

    In case of error

    func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
    
            print("i am not available in simulator \(error)")
    }
    

    In case if you need to know the permissions granted

    UNUserNotificationCenter.current().getNotificationSettings(){ (settings) in
    
                switch settings.soundSetting{
                case .enabled:
    
                    print("enabled sound setting")
    
                case .disabled:
    
                    print("setting has been disabled")
    
                case .notSupported:
                    print("something vital went wrong here")
                }
            }