Firebase FCM和订阅主题澄清



#1我很困惑,一旦didreceivereregistrationtoken得到fcmToken如何保存到云消息。我在文档中找不到一个简单的答案。我通过调用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)
}

但我想知道的仍然是app委托中的哪一步发送/推送/添加注册令牌到云消息,所以sendMessageTouser实际上是有效的。

App Delegate部分

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中刷新的注册令牌将用户订阅到他们现有的聊天,对吗?

应用委托中的哪一步发送/推送/添加注册令牌到Cloud Messaging,以便sendMessageTouser实际工作。

在以任何方式调用代码之前,令牌实际上被发送给FCM。只有当FCM知道了这个令牌,你的代码才会被调用,这样你就可以注册它了。

最新更新