La notification FCM Push ne fonctionne pas dans iOS 11

J'ai besoin de gérer la notification push et c'est fait avec la version inférieure de ios mais dans ios 11 jamais recevoir de notification push. J'utilise Firebase Cloud Messaging. s'il vous plaît quelqu'un a une solution alors s'il vous plaît partager.

S'il vous plaît vérifier comme entrez la description de l'image ici

entrez la description de l'image ici

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.onSetUserFCMSsortingngToken(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 foreground func 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 notification func 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 Refreshed func messaging(_ messaging: Messaging, didRefreshRegistrationToken fcmToken: Ssortingng) { 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 foreground func 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) { } 

Il semble qu'avec FirebaseInstanceID 2.0.3, les notifications push ne fonctionnent pas. Cela m'a aidé à définir: pod 'FirebaseInstanceID', "2.0.0". Peut-être que dans la prochaine version ce sera corrigé.

Le problème semble être avec

  • FirebaseInstanceID Version inférieure à 1.0.9

  • FirebaseInstanceID Version entre 2.0.1 – 2.0.3

Définissez votre file pod comme ci-dessous:

Pour Swift 2.3 et Xcode 8: (FirebaseInstanceID v1.1.0 est installé)

 pod 'Firebase/Core', '3.8.0' pod 'Firebase/Messaging' 

Pour Swift 3 et Xcode 9:

 pod 'Firebase/Core' pod 'Firebase/Messaging' pod 'FirebaseInstanceID', "2.0.0 

Je ne voulais pas passer à FirebaseInstanceID 2.0.0 pour corriger le problème car je voulais utiliser Swift 2.3 uniquement