Hi all! Just faced with the issue that Push Notifications stopped work on iOS 10.
So I would like to write the article what has been changed in new version and how to fix it.

After debugging, I revealed that actually in iOS10 didReceiveRemoteNotification isn’t called anymore.
cat

So there were some changes for new version and we need to make corrections in our code.
Follow next steps and do not forget about checking for iOS 10 version.
Step1 – Add framework

import UserNotifications

Step2 – Inherit AppDelegate with UNUserNotificationCenterDelegate

final class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {
}

Step3 – Make appropriate changes for registerPushNotifications and call it didFinishLaunchingWithOptions


private func registerPushNotifications() {
    if #available(iOS 10.0, *) {
        UNUserNotificationCenter.currentNotificationCenter().delegate = self
        UNUserNotificationCenter.currentNotificationCenter().requestAuthorizationWithOptions([.Badge, .Sound, .Alert], completionHandler: { granted, error in
                
            if granted {
                UIApplication.sharedApplication().registerForRemoteNotifications()
            } else {
                    // Unsuccessful...
            }
          })
    } else {
        let userNotificationTypes: UIUserNotificationType = [.Alert, .Badge, .Sound]
        let settings = UIUserNotificationSettings(forTypes: userNotificationTypes, categories: nil)
        UIApplication.sharedApplication().registerUserNotificationSettings(settings)
        UIApplication.sharedApplication().registerForRemoteNotifications()
   }
}

Step4 – Implement new handlers


// Left this for older versions 
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
}

For iOS10 use these methods and  pay attention how we can get userInfo
// Foreground push notifications handler
@available(iOS 10.0, *)
func userNotificationCenter(center: UNUserNotificationCenter, willPresentNotification notification: UNNotification, withCompletionHandler completionHandler: (UNNotificationPresentationOptions) -> Void) {
    if let userInfo = notification.request.content.userInfo as? [String : AnyObject] {
        // Getting user info
    }
    completionHandler(.Badge)
 }
    
// Background and closed  push notifications handler
@available(iOS 10.0, *)
func userNotificationCenter(center: UNUserNotificationCenter, didReceiveNotificationResponse response: UNNotificationResponse, withCompletionHandler completionHandler: () -> Void)  {
    if let userInfo = response.notification.request.content.userInfo as? [String : AnyObject] {
        // Getting user info
    }
    completionHandler()
}

Now it should work!
rabbit-with-letter
Additionally, to get application state use UIApplication.sharedApplication().applicationState

Hope this article would be helpful for you!