目前,我在每个应用启动时都会为每个用户订阅一个主题&&令牌刷新如此:
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
if let user = Auth.auth().currentUser {
let topic = "topic_for_user_with_id_" + user.uid
Messaging.messaging().subscribe(toTopic: topic)
}
}
像这样我只需从云功能发送通知:
const topic = `topic_for_user_with_id_${userId}`
return admin.messaging().sendToTopic(topic, payload, options);
为什么我不应该使用主题并直接向设备令牌发送通知是否有任何缺点?
答案 0 :(得分:1)
没有缺点,当很多人订阅某个例子weather
时,通常会使用主题。在这种情况下,最好使用主题。
使用令牌发送通知通常是针对一个人,而不是很多人。
来自有关主题的文档:
基于发布/订阅模型,FCM主题消息传递允许您向已选择加入特定主题的多个设备发送消息。您可以根据需要编写主题消息,FCM可以处理路由并将消息可靠地传递给正确的设备。
如果您要发送私人通知,请使用令牌发送到该特定设备,因此没有多少人看到私人通知的内容。
我认为使用主题的唯一缺点是用户需要从他自己的手机取消订阅主题,因为它基于公共/订阅模式。
但我认为这已在Admin FCM API
中解决了。
更多信息:
https://firebase.google.com/docs/cloud-messaging/admin/manage-topic-subscriptions
以上使用主题和令牌,您只需拥有令牌就可以取消订阅注册到主题的用户。