我已经在firebase中使用了云消息传递功能,并利用了将通知发送给所有订户的sendToTopic()
旧方法,但是我在应用程序中使用了主题的限制。现在,我想使用用户文档中的注册设备令牌将通知发送给每个设备,该通知通过用户的文档中存储为MAP对象,来管理发送和接收通知的方式。我将迭代每个设备令牌并使用sendToDevice()
将通知发送到每个设备。
我现在有一个函数,让我们称其为 new_added ,每当集合中添加新文档时,它会触发。现在,每次 new_added 函数都会被调用,这将迭代Users
集合中的每个文档,并在Notification
Collection下编写一个新文档。结构将是此Users (collection)
> uid (document)
> Notifications
> doc
。Notification
集合下的每个新添加项目都会触发服务器中的功能。该操作太重了,特别是如果有100万用户,是否可以在540秒内使用云功能在服务器端执行此类操作,这被认为是触发后功能的最大运行时?我真的希望它以这种方式工作。是否有任何工具可以帮助最小化操作?
如果您想实现自己的FCM消息传递风扇,则将相同的消息发送给许多用户。这类似于FCM主题消息已经做的事情,我肯定会考虑目前使用它。
但是,如果您想自己实施,请考虑如何为基础系统优化它。由于您将令牌存储在Firestore中,因此您阅读的文档数量是成本的关键因素。
减少您阅读的文档数量的一种方法可能是将一组设备的令牌存储到一个文档中。例如,您可以为每个"主题"创建一个文档,并将其写入数据库中,并将其添加到该文档中。然后,当您需要向所有设备发送消息以获取主题时,您只需阅读该主题文档,然后一口气获取所有令牌即可。如果您将文档命名为包含令牌的主题,例如mytopic-tokens
。
这种方法的主要问题是文档不得大于1MB。假设令牌最多是256个字节(它们似乎是152-162个字符),您可以将4000个令牌存储在文档中。如果您有更多的令牌,则需要创建多个文档。一个简单的命名方案可以在这里有很长的路要走,例如mytopic-tokens-1
,mytopic-tokens-2
等。您可以在Firestore中获得所有这些文档。