如何在聊天应用程序中使用FCM主题进行通知



我正在与Flutter和Firestore后端进行聊天。

每条消息都是Firestore集合中的新文档,具有UID和文本字段。聊天是1:1随机的,所以在进入聊天之前不知道用户会和谁说话。聊天集中的DocID都是自动id。

我已经阅读了可以使用主题来管理发送通知。这应该比使用单个设备fcm令牌更容易。

有人知道如何实现这个随机1:1聊天应用程序的使用主题吗?

您肯定可以为每个1:1的对话使用一个单独的主题,例如我在这里描述的命名方案:在Firebase中管理聊天频道的最佳方式。但正如Doug在评论中指出的那样,有一些事情需要考虑,这导致大多数开发人员不仅仅在聊天应用程序中使用FCM。

例如:FCM主题不安全。这意味着任何发现主题ID的人都可以订阅它,从而无意中听到1:1的对话。虽然您可以生成难以猜测的主题,但作为一种安全机制,您不应该依赖于不知道主题ID。

考虑替代方案的另一个原因是FCM消息是瞬态的:一旦它们被传递,就不再有任何痕迹。使用当前的Firestore实现,您可以查询数据库以获取要显示的所有消息,而使用纯FCM实现,您必须构建自己的数据库(如果应用程序需要)。

出于这些原因,据我所知,大多数聊天应用程序都使用FCM(用于推送通知)和在线数据库(用于持久性)作为后端服务。

我发现Frank关于"排序的userID组合键"的评论非常有趣。我可能会将其用作数据库(实时/火库)中的聊天键,然而,对于通知,我认为我仍然会为每个用户使用一个主题——这样我就可以避免通知发布消息的用户。如果这不是一个问题,那么每个聊天室只讨论一个话题。

另外提到弗兰克,我可能会在所有的主题名称中使用额外的关键字,使它们很难猜测。(但稍后添加,这样你就不会被非核心内容分散注意力)

在这个答案中,您有一个如何使用onCreate触发器将通知发布到主题(从函数后端)的示例。

在flutter代码中,可以使用firebase_messaging插件中的subscribeToTopic开始收听某个主题。

注意:如果你的应用程序支持用户注销[可能会:)],那么你还必须删除设备中的令牌,以避免收到最后一个登录用户的通知。

相关内容

  • 没有找到相关文章

最新更新