使用实时数据库的云功能发送通知的问题

Posted

技术标签:

【中文标题】使用实时数据库的云功能发送通知的问题【英文标题】:Problems about using cloud function with realtime database to send notification 【发布时间】:2019-07-03 16:11:12 【问题描述】:

更新:我发现这不是增加使用量的主要原因。


我已经在使用通知密钥来发送通知。我知道不能订阅主题的通知密钥。但是我们需要一个用户可以在多个设备上登录同一个帐户。所以我决定在实时数据库中保存通知键。

我的应用程序是如何工作的,当用户向聊天室发送消息然后触发云功能并读取数据一次(group_chatroom_notification_keys/chatroom_id_1)以获取所有 user_notification_key_n 并向每个用户发送通知。问题是发送每条消息都需要再次读取聊天室的所有通知密钥。这样会增加下载的实时数据库 GB。我现在每个月向谷歌支付 35% 的收入。

我也有点迷惑这个doc说:

“为了快速、安全地传递给单个设备或小组设备,请将消息定位到注册令牌,而不是主题。”

什么是安全交付?如果我使用 chatroom_id 作为主题并将所有聊天室用户令牌订阅到主题以降低成本。那么聊天室通知数据会被其他设备窃取吗?因为所有聊天室都应该是私密的,我不知道如何正确降低成本。

有人有更好的方法吗?有必要为此付出代价吗?

【问题讨论】:

为什么不给用户订阅chatroom_id。我认为您需要为数据库的读取和写入付费,而不是为通知付费。也许您正在使用分页获取所有聊天而不是最新消息。只是一个想法。 【参考方案1】:

您不应该一遍又一遍地阅读密钥。我也建立了私人聊天室应用程序。我的使用方式是:

当用户打开聊天室时,我只加载所有用户密钥一次。现在,无论我发送多少次消息,我都会将所有加载的密钥传递给云功能和 CF 火灾通知。我希望它对您有所帮助并节省一些数据使用量。

【讨论】:

感谢您的回答。您的意思是在设备上仅加载所有用户密钥一次,然后发送包含所有已加载密钥的每条消息。但是 CF 仍然需要每次从 RT 数据库加载所有已加载密钥仍然需要使用不是吗?你能解释一下你的答案或我误解的细节吗? 不,您将已加载的密钥传递给 CF。您可以将键的数组列表作为参数传递给 CF。搜索如何将参数传递给 CF 哦。您的意思是直接从应用程序使用 https.onCall 触发调用 CF。不传递到 RT 数据库然后触发 CF?

以上是关于使用实时数据库的云功能发送通知的问题的主要内容,如果未能解决你的问题,请参考以下文章

每次在 firebase 实时数据库中添加新孩子时使用 firebase 函数发送推送通知不起作用

javascript 用于连接DialogFlow和Firebase实时数据库的云功能

尝试使用实时数据库通信时未收到通知

Firebase 云功能不发送异步推送通知

Flutter 实时通知

Swift 从用户向用户发送推送通知 Firebase