2021年1月6日星期三

Firebase Cloud Messaging: Could not connect to the server

I'm trying to test Firebase Cloud Messaging with an actual device. But the Xcode Console always returns "received failure notification", "failed to connect, ", "encountered error, " "Could not connect to the server." What am I doing wrong?

So far, I have done the following.

  1. Registering an App identifer at Certificates, Identifiers & Profiles. Creating and downloading an auth key (.p8).
  2. Uploading it to Firebase Console.

enter image description here

  1. Downloading GoogleService-Info.plist and adding it to the Xcode project. In this plist, I've added a key titled 'SERVER_KEY' with its value as Token from Cloud Messaging. According to this Japanese web site, that's what I need to do. According to other sites, I don't see this step, though.

enter image description here

  1. Cocoapods

    platform :ios, '13.2'    target 'FCMTestMeBaby' do    use_frameworks!      pod 'Firebase'    pod 'Firebase/Messaging'    end  
  2. Capabilities: Push Notifications, Background Modes with Background fetch and Remote notifications are on.

  3. AppDelete goes as follows:

    import UIKit  import UserNotifications  import Firebase      @UIApplicationMain  class AppDelegate: UIResponder, UIApplicationDelegate {      var window: UIWindow?      let gcmMessageIDKey = "gcm.message_id"    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {      FirebaseApp.configure()        Messaging.messaging().delegate = self        // Register for remote notifications. This shows a permission dialog on first run, to      // show the dialog at a more appropriate time move this registration accordingly.      if #available(iOS 10.0, *) {          // For iOS 10 display notification (sent via APNS)          UNUserNotificationCenter.current().delegate = self            let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]          UNUserNotificationCenter.current().requestAuthorization(              options: authOptions,              completionHandler: {_, _ in })      } else {          let settings: UIUserNotificationSettings =              UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)          application.registerUserNotificationSettings(settings)      }        application.registerForRemoteNotifications()        return true  }    func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) {      // If you are receiving a notification message while your app is in the background,      // this callback will not be fired till the user taps on the notification launching the application.        if let messageID = userInfo[gcmMessageIDKey] {          print("Message ID: \(messageID)")      }      print(userInfo)  }    func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {      // If you are receiving a notification message while your app is in the background,      // this callback will not be fired till the user taps on the notification launching the application.      // TODO: Handle data of notification        // With swizzling disabled you must let Messaging know about the message, for Analytics      // Messaging.messaging().appDidReceiveMessage(userInfo)        if let messageID = userInfo[gcmMessageIDKey] {          print("Message ID: \(messageID)")      }      print(userInfo)      completionHandler(UIBackgroundFetchResult.newData)  }    func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {      print("Unable to register for remote notifications: \(error.localizedDescription)")  }    func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {      print("APNs token retrieved: \(deviceToken)")        Messaging.messaging().apnsToken = deviceToken      }  }    @available(iOS 10, *)  extension AppDelegate: UNUserNotificationCenterDelegate {      func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {      let userInfo = notification.request.content.userInfo      if let messageID = userInfo[gcmMessageIDKey] {          print("Message ID: \(messageID)")      }      print(userInfo)      completionHandler([[.alert, .sound]])  }      func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {      let userInfo = response.notification.request.content.userInfo      if let messageID = userInfo[gcmMessageIDKey] {          print("Message ID: \(messageID)")      }      print(userInfo)      completionHandler()     }  }      extension AppDelegate : MessagingDelegate {      func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) {      print("Firebase registration token: \(String(describing: fcmToken))")        let dataDict:[String: String] = ["token": fcmToken ?? ""]      NotificationCenter.default.post(name: Notification.Name("FCMToken"), object: nil, userInfo: dataDict)      }  }  

The code above appears bad-formatted unfortunately regardless of my best effort. I have gone through the list shown at this topic. I would appreciate any help. The Swift version is 5. And the Xcode version is 12.2. Lastly, I do get prompted for notification permission.

https://stackoverflow.com/questions/65605909/firebase-cloud-messaging-could-not-connect-to-the-server January 07, 2021 at 10:33AM

没有评论:

发表评论