控制台中收到 Firebase 云消息通知,但未显示在 phone - Swift 应用程序中

Firebase Cloud Message Notification being received in Console but not being displayed in phone - Swift App

所以我正在尝试使用 Firebase Functions 为我的应用程序中的消息中心实施云消息传递。我的 firebase 函数说它已经在工作了,我确实在我的控制台日志中收到了消息,但是,通知没有部署在我的后台模式 phone 中。

我已经实现了在我的用户登录主视图后接收通知的权限。这是我的代码:

 func askNotificationPermission() {
        
        //Firebase Push Notifications
          UNUserNotificationCenter.current().delegate = self

          let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
          UNUserNotificationCenter.current().requestAuthorization(
            options: authOptions,
            completionHandler: {_, _ in
                print("HOLA TE DIERON PERMISO")
          })
        
            Messaging.messaging().shouldEstablishDirectChannel = true
        
          UIApplication.shared.registerForRemoteNotifications()
          Messaging.messaging().delegate = self
  
    }

我已经在 didFinishLaunchingApplication 中实现了必要的 Firebase 功能:

  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    //MARK: Firebase
    FirebaseApp.configure()
    
    //Firebase Cloud Messaging
      Messaging.messaging().delegate = self
    
    
    //MARK: Others
    //KeyboardManager
    IQKeyboardManager.shared.enable = true
    
    //navbar
    let navControl = UINavigationBar.appearance()
    let myColor : UIColor = UIColor(red: 0, green: 0.1333, blue: 0.3176, alpha: 1)
    navControl.tintColor = myColor

    return true
}

这是我在 App Delegate 中对通知的扩展:

    extension AppDelegate: UNUserNotificationCenterDelegate, MessagingDelegate {
    
    func applicationDidEnterBackground(_ application: UIApplication) {
        Messaging.messaging().shouldEstablishDirectChannel = true
    }
    
    func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
           
           let dataDict: [String: String] = ["token": fcmToken]
           NotificationCenter.default.post(name: Notification.Name("FCMToken"), object: nil, userInfo: dataDict)
           
           //TODO: If necessary send token to application server
           //Note: This callback is fired at each app startup and whenever a new token is generated
       }
    
    func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
        
        Messaging.messaging().appDidReceiveMessage(userInfo)
        
        if let messageID = userInfo[gcmMessageIDKey] {
           print("Message ID: \(messageID)")
         }

         // Print full message.
         print("USER INFO: ",userInfo)
    }
    
    func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
        print(userInfo)
        completionHandler(UIBackgroundFetchResult.newData)
        print("USER INFO IN DID RECEIVE REMOTE NOTIFICAITON:", userInfo, UIBackgroundFetchResult.newData)
    }
    
    func userNotificationCenter(_ center: UNUserNotificationCenter,
                                willPresent notification: UNNotification,
                                withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
        
        let userInfo = notification.request.content.userInfo as! [String:Any]

        completionHandler([.alert, .badge, .sound])
        print("HOLI")

    }
}

我不知道可能是什么问题,也不知道为什么我在控制台中收到信息但没有推送到应用程序。我搜索了几个 Whosebug 问题,但 none 有效。

这是我的控制台记录的内容:

2020-08-06 11:06:06.804344-0500 FleaMarket_UserSide[13985:4429211] [] nw_read_request_report [C2] Receive failed with error "Software caused connection abort" [AnyHashable("title"): Jay Shetty Meditations, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("gcm.message_id"): 1596729966264394, AnyHashable("message"): did you get it?, AnyHashable("google.c.sender.id"): 520471783461] USER INFO IN DID RECEIVE REMOTE NOTIFICAITON: [AnyHashable("title"): Jay Shetty Meditations, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("gcm.message_id"): 1596729966264394, AnyHashable("message"): did you get it?, AnyHashable("google.c.sender.id"): 520471783461] UIBackgroundFetchResult 2020-08-06 11:06:06.835793-0500 FleaMarket_UserSide[13985:4429216] 6.27.0 - [Firebase/Firestore][I-FST000001] WatchStream (282c75618) Stream error: 'Unavailable: Socket is not connected'

我发现了我的错误。它在我的 firebase 函数中。我写错了我的有效载荷。我写过:

var 新消息 = { 数据: { 标题:组名, body: 消息 }, 主题:提供主题, };

根据 Firebase 文档,正确的负载是通知:

var newmessage = {
      notification: {
        title: groupName,
        body: message
      },
      topic: offerTopic,
    };

确保坚持在此处找到的 firebase 云消息文档,否则它不会将其视为通知而不会推送。

https://firebase.google.com/docs/cloud-messaging/ios/topic-messaging