Push Notifications not being received on iOS 10, but working on iOS 9 and before Push Notifications not being received on iOS 10, but working on iOS 9 and before swift swift

Push Notifications not being received on iOS 10, but working on iOS 9 and before


Ok I have figured it out. I now have my original Push Notifications that was working on iOS 9 working on iOS 10 with Xcode 8 and Swift 2.3.

I implemented this by making the following changes to my AppDelegate:

1) On my project settings, under the Capabilities Tab, I scroll down to "Push Notifications" and turn it to "ON". This automatically generates an entitlements file that contains the key "APS Environment" and with value "development".

2) In AppDelegate.swift I make several code changes. I start by importing the UserNotifications framework:

import UserNotifications

Then I have AppDelegate implement the UNUserNotificationCenterDelegate protocol:

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

Then I add the following method:

func registerForPushNotifications(application: UIApplication) {    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{                //Do stuff if unsuccessful...            }        })    }    else{ //If user is not on iOS 10 use the old methods we've been using        let notificationSettings = UIUserNotificationSettings(            forTypes: [.Badge, .Sound, .Alert], categories: nil)        application.registerUserNotificationSettings(notificationSettings)    }}

Then I call this newly created function inside didFinishLaunchingWithOptions:

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

I leave my didRegisterForRemoteNotificationsWithDeviceToken method unchanged:

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {    //Implement this. Do something with the token I receive. Send it to my push notification server to register the device or something else I'd like to do with the token. }

Now I implement two new methods for iOS 10 to handle the receiving of Push Notifications:

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

I did not remove any of the methods I have previously implemented for Push Notifications in iOS 9.


IOS 10 has a different Notification kit.

import UserNotificationsfunc application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {    if #available(iOS 10.0, *) {        let center = UNUserNotificationCenter.current()        center.requestAuthorization(options: [.badge, .alert , .sound]) { (granted, error) in            if granted {                UIApplication.shared.registerForRemoteNotifications()            }        }    } else {        let type: UIUserNotificationType = [UIUserNotificationType.badge, UIUserNotificationType.alert, UIUserNotificationType.sound]        let setting = UIUserNotificationSettings(types: type, categories: nil)        UIApplication.shared.registerUserNotificationSettings(setting)        UIApplication.shared.registerForRemoteNotifications()    }}func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data){    let token = String(format: "%@", deviceToken as CVarArg)}


I have fixed this issue using below step:

Step 1:Go to Project -> Target -> Capabilities -> Push Notifications -> Switch it ON

enter image description here Step 2: Fix issue related to proper certificate,provisioning profile

Step 3: Quit Xcode, Clean and Run