在控制台中收到 Firebase 云消息通知但未在手机中显示 - Swift App

Posted

技术标签:

【中文标题】在控制台中收到 Firebase 云消息通知但未在手机中显示 - Swift App【英文标题】:Firebase Cloud Message Notification being received in Console but not being displayed in phone - Swift App 【发布时间】:2020-08-06 16:23:50 【问题描述】:

因此,我正在尝试使用 Firebase 功能为我的应用中的消息中心实施云消息传递。我的 firebase 功能说它已经在工作,并且我确实在控制台日志中收到了消息,但是,通知没有在我的手机中以后台模式部署。

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

 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")

    

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

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

2020-08-06 11:06:06.804344-0500 FleaMarket_UserSide[13985:4429211] [] nw_read_request_report [C2] 接收失败,出现错误“软件导致连接中止” [AnyHashable("title"): Jay Shetty Meditations, AnyHashable("aps"): “内容可用”= 1; , AnyHashable("gcm.message_id"): 1596729966264394, AnyHashable("message"): 你明白了吗, AnyHashable("google.c.sender.id"): 520471783461] 收到远程通知中的用户信息:[AnyHashable("title"): Jay Shetty Meditations, AnyHashable("aps"): “内容可用”= 1; , AnyHashable("gcm.message_id"): 1596729966264394, AnyHashable("message"): 你明白了吗, 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) 流错误:'不可用:套接字未连接'

【问题讨论】:

试试这个***.com/questions/49522284/…启用服务 如果你还没有启用远程通知服务***.com/questions/30979218/… @naga 我已经将 FirebaseAppDelegateProxyEnabled 设置为 YES,但我还是不明白 @naga 并通过启用远程通知服务......你的意思是能力吗?如果是这样,那么是的。我已经启用了它。当我通过 Firebase 内部的 CLOUD MESSAGING 发送推送通知时,我确实会收到推送通知 您好,您是否尝试按照任何指南或教程来实现这一目标?例如,您尝试过this 吗? 【参考方案1】:

我发现了我的错误。它在我的火力基地功能中。我写错了我的有效载荷。我写过:

var 新消息 = 数据: 标题:组名, 正文:消息 , 主题:提供主题, ;

根据 Firebase 文档,正确的有效负载是 NOTIFICATION:

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

请务必遵守此处找到的 Firebase 云消息文档,否则它不会将其视为通知并且不会推送它。

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

【讨论】:

以上是关于在控制台中收到 Firebase 云消息通知但未在手机中显示 - Swift App的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 云消息未在响应中收到 multicast_id

通过cURL / PHP发送时,设备上未收到Firebase通知

收到 Firebase 注册令牌但未显示通知

设备未收到 Firebase 云消息通知

iOS 未收到来自 Firebase 云消息传递的通知

Firebase 云消息传递未在 iOS 14 上提供推送通知