目前,我在每次应用程序启动和令牌刷新时为每个用户订阅一个主题,如下所示:
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);
为什么我不应该使用主题并将通知直接发送到设备令牌,这有什么缺点吗?
不,没有缺点,当很多人订阅某个事物示例时,通常会使用主题weather
.在这种情况下,最好使用主题。
使用令牌发送通知,通常是对一个人完成的,而不是对很多人。
来自有关主题的文档:
根据发布/订阅模型,FCM 主题消息传递允许您向已选择加入特定主题的多个设备发送消息。您可以根据需要撰写主题消息,FCM 会处理路由并将消息可靠地传递到正确的设备。
如果您要发送私人通知,请使用令牌发送到该特定设备,因此没有多少人看到私人通知的内容。
我认为使用主题的唯一缺点是用户需要从自己的手机取消订阅主题,因为它基于公共/订阅模型。
但我认为这在Admin FCM API
中得到了解决.
更多信息在这里:
https://firebase.google.com/docs/cloud-messaging/admin/manage-topic-subscriptions
以上同时使用主题和令牌,您只需使用令牌即可取消订阅注册到主题的用户。