Swift Firebase FCM和订阅主题说明

Swift Firebase FCM和订阅主题说明,swift,firebase,firebase-cloud-messaging,devicetoken,Swift,Firebase,Firebase Cloud Messaging,Devicetoken,#1一旦didReceiveRegistrationToken获得FCM通知,我就感到困惑,知道如何将其保存到云消息中。我在文档中找不到简单的答案。我通过调用UserService.updateChildS(child:“userToken”,childVal:fcmToken)将令牌保存到数据库中,这样我就可以向每个用户发送推送通知 Database.database().reference().child("allUsers").child(toId).child

#1一旦didReceiveRegistrationToken获得FCM通知,我就感到困惑,知道如何将其保存到云消息中。我在文档中找不到简单的答案。我通过调用UserService.updateChildS(child:“userToken”,childVal:fcmToken)将令牌保存到数据库中,这样我就可以向每个用户发送推送通知

    Database.database().reference().child("allUsers").child(toId).child("userToken").observeSingleEvent(of: .value, with: { (snapshot) in
        if let toToken = snapshot.value as? String {
            if toToken != "" {
                PushNotifications.sendMessageTouser(to: toToken, title: "Some title", body: properties["text"] as! String)
            }
        }
    })

struct PushNotifications {
    static func sendMessageTouser(to token: String, title: String, body: String) {
        print("sendMessageTouser()")
        let paramString: [String : Any] = ["to" : token,
                                           "notification" : ["title" : title, "body" : body, "sound": "default"]]
        sendMessage(paramString: paramString)
   }
但我仍然想知道的是,应用程序委托中的哪一步将注册的令牌发送/推送/添加到云消息中,这样sendMessageTouser才能真正工作

应用程序代理的一部分

extension AppDelegate : MessagingDelegate {
    func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {

        if let _ = Auth.auth().currentUser,
           let userData = UserDefaults.standard.object(forKey: Constants.UserDefaults.currentUser) as? Data,
           let user = try? JSONDecoder().decode(User.self, from: userData) {
            User.setCurrent(user)
            UserService.updateChildS(child: "userToken", childVal: fcmToken)
        } else {
            UserDefaults.standard.set(fcmToken, forKey: "fcmToken")
        }

    }
    func messaging(_ messaging: Messaging, didRefreshRegistrationToken fcmToken: String) {
        UserService.show(forUID: User.current.uid) { (user) in
            if let user = user {
                for group in user.groups {
                    Messaging.messaging().subscribe(toTopic: group.trimmingCharacters(in: .whitespaces)) { error in
                        
                    }
                }
            }
        }
        UserService.updateChildS(child: "userToken", childVal: fcmToken)
    }
}
#2我向用户订阅主题,以便他们可以获得群聊通知。用于向用户订阅主题的令牌是否与上面的fcmToken相同?因为我在想,如果它改变了,我需要使用didRefreshRegistrationToken中刷新的注册令牌为用户订阅他们现有的聊天记录,对吗

应用程序代理中的哪一步向云消息发送/推送/添加注册的令牌,以便sendMessageTouser实际工作


在以任何方式调用代码之前,令牌实际上会发送到FCM。只有当FCM知道令牌后,才会调用您的代码,以便您也可以注册它。

请将您自己的问题限制在每篇文章中的一个问题,因为有些人可能会回答其中一个问题,但不能回答另一个问题。好的。Messaging.Messaging().subscribe是否也使用fcmToken?订阅主题在幕后使用令牌,但我实际上不确定您是否需要重新订阅,或者这是否也在幕后处理。因此,我建议将其作为一个单独的问题发布。