我刚刚第一次使用firebase功能推送通知。 我用以下方式监控变更:
exports.observeNotifications = functions.database.ref('/notifications/{user_id}/{notification_id}').onWrite((change, context) => {
稍后,我使用:
const userQuery = admin.database().ref(`users/${from_user_id}/username`).once('value');
const deviceToken = admin.database().ref(`/users/${user_id}/device_token`).once('value');
检索发件人的userUID和设备令牌,该令牌稍后与sendToDevice()
一起使用
这种方法很好,是我在任何地方推荐的方法,但我想知道为什么要在用户到用户场景中使用主题这样做。
在聊天应用程序的示例中,每次发送聊天时,都会向notifications/users/{uid} ...
发送一个值并触发该事件。然后必须进行值调用,必须完成promise处理,然后可以配置和发送推送有效负载。
对于主题,当用户首次加载应用程序第一次时,您可以订阅用户,例如" chat_notifications_usersIUID"。这消除了获取设备令牌并完成使用promises的过程的需要,并且极大地简化了向特定用户发送通知的过程,直到推送到特定于接收者UID的特定主题。
在向用户发送推送通知时,使用firebase功能主题时是否存在任何缺点。
答案 0 :(得分:4)
主题可以公开访问。因此,即使您为每个用户创建一个主题,所有用户都可以订阅每个主题。
因此,如果消息被认为是公开的,则仅应以这种方式使用主题。例如。在公共聊天室中,这可能会很好,因为每个人都已经可以在公共聊天室中看到消息了。但是通过主题发送私人消息意味着其他用户在为用户了解主题时可以拦截它们。
如果您的消息不打算公开,则需要发送给各个令牌。您只应在极端情况下达到速率限制。如果您遇到这种情况,请reach out to Firebase support获得故障排除方面的个性化帮助