Ios – FCM Push notification not working in iOS 11

apple-push-notifications, firebase, ios, swift

I need to handle push notification and that's done with a lower version of ios but in ios 11 never receive any push notification. I using Firebase Cloud Messaging. please, anyone has a solution then please share.

Best Solution

Please Check as enter image description here

enter image description here

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {    // Use Firebase library to configure APIs    FirebaseApp.configure()    self.registerForPushNotifications(application: application)    Messaging.messaging().delegate = self    if let token = InstanceID.instanceID().token() {        NSLog("FCM TOKEN : \(token)")        DataModel.sharedInstance.onSetUserFCMStringToken(FCM: token)        self.connectToFcm()    }    if launchOptions != nil {        //opened from a push notification when the app is closed        _ = launchOptions?[UIApplicationLaunchOptionsKey.remoteNotification] as? [AnyHashable: Any] ?? [AnyHashable: Any]()    }    else {        //opened app without a push notification.    }    return true}

@available(iOS 10, *)

extension AppDelegate: UNUserNotificationCenterDelegate {// iOS10+, called when presenting notification in foregroundfunc userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {    let userInfo = notification.request.content.userInfo    NSLog("[UserNotificationCenter] willPresentNotification: \(userInfo)")    //TODO: Handle foreground notification    completionHandler([.alert])}// iOS10+, called when received response (default open, dismiss or custom action) for a notificationfunc userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {    let userInfo = response.notification.request.content.userInfo    NSLog("[UserNotificationCenter] didReceiveResponse: \(userInfo)")    //TODO: Handle background notification    completionHandler()}}extension AppDelegate : MessagingDelegate {//MARK: FCM Token Refreshedfunc messaging(_ messaging: Messaging, didRefreshRegistrationToken fcmToken: String) {    NSLog("[RemoteNotification] didRefreshRegistrationToken: \(fcmToken)")}// Receive data message on iOS 10 devices while app is in the foreground.func messaging(_ messaging: Messaging, didReceive remoteMessage: MessagingRemoteMessage) {    NSLog("remoteMessage: \(remoteMessage.appData)")}}//Register for push notification.func registerForPushNotifications(application: UIApplication) {    if #available(iOS 10.0, *) {        let center  = UNUserNotificationCenter.current()        center.delegate = self        center.requestAuthorization(options: [.alert,.sound]) { (granted, error) in            if error == nil{                DispatchQueue.main.async(execute: {                    application.registerForRemoteNotifications()                })            }        }    }    else {        let settings = UIUserNotificationSettings(types: [.alert,.sound], categories: nil)        application.registerUserNotificationSettings(settings)        application.registerForRemoteNotifications()    }    // Add observer for InstanceID token refresh callback.    NotificationCenter.default.addObserver(self, selector: #selector(self.tokenRefreshNotification), name: NSNotification.Name.InstanceIDTokenRefresh, object: nil)}@objc func tokenRefreshNotification(_ notification: Notification) {    print(#function)    if let refreshedToken = InstanceID.instanceID().token() {        NSLog("Notification: refresh token from FCM -> \(refreshedToken)")    }    // Connect to FCM since connection may have failed when attempted before having a token.    connectToFcm()}func connectToFcm() {    // Won't connect since there is no token    guard InstanceID.instanceID().token() != nil else {        NSLog("FCM: Token does not exist.")        return    }    Messaging.messaging().shouldEstablishDirectChannel = true}func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {    NSLog("Notification: Unable to register for remote notifications: \(error.localizedDescription)")}// This function is added here only for debugging purposes, and can be removed if swizzling is enabled.// If swizzling is disabled then this function must be implemented so that the APNs token can be paired to the InstanceID token.func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {    Messaging.messaging().apnsToken = deviceToken}// iOS9, called when presenting notification in foregroundfunc application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {    NSLog("didReceiveRemoteNotification for iOS9: \(userInfo)")}func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {}