didRegisterForRemoteNotificationsWithDeviceToken not getting called on ios 10

One last thing, add framework:

import UserNotifications

class AppDelegate: /*Some other protocols I am extending...*/, UNUserNotificationCenterDelegate {

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
...
    registerForPushNotifications(application)
...
}


    func registerForPushNotifications(application: UIApplication) {

    if #available(iOS 10.0, *){
        UNUserNotificationCenter.current().delegate = self
        UNUserNotificationCenter.current().requestAuthorization(options: [.badge, .sound, .alert], completionHandler: {(granted, error) in
            if (granted)
            {
                UIApplication.shared.registerForRemoteNotifications()
            }
            else{
                //Do stuff if unsuccessful...
            }
        })
    }
    else { //If user is not on iOS 10 use the old methods we've been using
        let notificationSettings = UIUserNotificationSettings(
            types: [.badge, .sound, .alert], categories: nil)
        application.registerUserNotificationSettings(notificationSettings)

    }

}
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {

 }
@available(iOS 10.0, *)
func userNotificationCenter(center: UNUserNotificationCenter, willPresentNotification notification: UNNotification, withCompletionHandler completionHandler: (UNNotificationPresentationOptions) -> Void) {
    //Handle the notification
}

@available(iOS 10.0, *)
func userNotificationCenter(center: UNUserNotificationCenter, didReceiveNotificationResponse response: UNNotificationResponse, withCompletionHandler completionHandler: () -> Void) {
    //Handle the notification
}

}

Apart from all these you have to enable your push notifications from capabilities.

Click on your project target you will see the screen and on capabilities enable push notifications.

enter image description here


Use this for ios 10 -

func registerForPushNotifications(_ application: UIApplication) {
      let notificationSettings = UIUserNotificationSettings(
                types: [.badge, .sound, .alert], categories: nil)
            application.registerUserNotificationSettings(notificationSettings)
}
func application(_ application: UIApplication, didRegister notificationSettings: UIUserNotificationSettings) {
      if notificationSettings.types != UIUserNotificationType() {
                application.registerForRemoteNotifications()
      }
}
func application( _ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data ) {

       var token: String = ""
       for i in 0..<deviceToken.count {
           token += String(format: "%02.2hhx", deviceToken[i] as CVarArg)
       }

       UserDefaults.standard.setValue(token, forKey: "kDeviceToken")
       UserDefaults.standard.synchronize()
}

func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
}
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) {}

PS:- Create proper certificate and bundle id also .Follow this tutorial - https://www.raywenderlich.com/123862/push-notifications-tutorial

Use //Register for push Notifications

registerForPushNotifications(application)

in didFinishLaunchingWithOptions method