首页 > 解决方案 > Firebase 云设备到设备推送通知设备令牌与主题

问题描述

我刚刚获得了第一次工作的 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');

检索发件人的用户 UID 和设备令牌,稍后用于sendToDevice()

这很好用,并且是我在各处看到的推荐方法,但我想知道为什么要在用户到用户场景中使用主题来做到这一点。

在聊天应用程序的示例中,每次发送聊天时,都会发送一个值notifications/users/{uid} ...并触发该事件。然后必须进行值调用,必须进行承诺处理,然后可以配置和发送推送有效负载。

使用主题,当用户第一次加载应用程序时,您可以为用户订阅“chat_notifications_usersIUID”之类的主题。这消除了获取设备令牌并完成使用承诺的过程的需要,并大大简化了向特定用户发送通知的过程,只需推送到特定于收件人 UID 的特定主题。

从用户向用户发送推送通知时,使用主题而不是 firebase 函数是否有任何缺点。

标签: iosfirebasefirebase-cloud-messaginggoogle-cloud-functions

解决方案


主题可公开访问。因此,即使您为每个用户创建一个主题,所有用户都可以订阅这些主题中的每一个。

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

如果您的消息不打算公开,则需要发送到各个令牌。你应该只在极端情况下达到速率限制。如果您遇到这种情况,请联系 Firebase 支持以获取个性化的故障排除帮助


推荐阅读