FCM推送通知在iOS 11中不起作用

我需要处理推送通知,这是使用较低版本的ios完成的,但在ios 11中从未收到任何推送通知。 我使用的是Firebase云消息传递。 拜托,任何人都有解决方案然后请分享。

请检查为 在此处输入图像描述

在此处输入图像描述

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 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: 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 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) { } 

问题似乎与

  • FirebaseInstanceID版本小于1.0.9

  • FirebaseInstanceID版本介于2.0.1 – 2.0.3之间

将pod文件设置如下:

对于Swift 2.3和Xcode 8 🙁安装了FirebaseInstanceID v1.1.0)

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

对于Swift 3和Xcode 9:

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

我不想升级到FirebaseInstanceID 2.0.0来修复问题,因为我只想使用Swift 2.3