Firebase云设备到设备推送通知设备令牌与主题

我刚刚第一次使用firebasefunction推送通知。 我正在监控变更:

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函数的主题是否存在任何缺点。

主题可公开访问。 因此,即使您为每个用户创建主题,所有用户也可以订阅每个主题。

因此,如果邮件被认为是公开的,那么您应该只以这种方式使用主题。 例如,在公共聊天室场景中,这可能会很好,因为每个人都可以在公共聊天室中看到消息。 但是通过主题发送私人消息意味着其他用户在知道用户的主题时可以拦截它们。

如果您的邮件不是公开的,则需要发送给个人令牌。 在极端情况下,您应该只达到速率限制。 如果您遇到这种情况,请与Firebase支持人员联系以获取有关故障排除的个性化帮助