我具有Flutter和Firestore后端的聊天功能。
每条消息都是Firestore集合中具有UID和文本字段的新文档。聊天是1:1且随机的,因此在进入聊天之前不知道用户会与谁交谈。聊天集合中的DocID都是自动ID。
我已阅读可以使用主题来管理发送通知。这比使用单个设备的fcm令牌要容易。
有人知道如何为这个随机的1:1聊天应用程序实现使用主题吗?
答案 0 :(得分:0)
对于每个1:1对话,您绝对可以使用单独的主题,例如,使用我在此处描述的命名方案:Best way to manage Chat channels in Firebase。但是,正如Doug在其评论中已经指出的那样,有些事情需要考虑,这导致大多数开发人员不仅仅将FCM用于其聊天应用程序。
例如:FCM主题不安全。这意味着找到主题ID的任何人都可以订阅它,因此可以偷听1:1对话。而且,尽管您可以生成难以猜测的主题,但也不应依靠不知道主题ID作为一种安全机制。
考虑替代方案的另一个原因是FCM消息是瞬态的:一旦传递了它们,就不再有任何痕迹。使用当前的Firestore实现,您可以查询数据库以显示所有消息,而使用纯FCM实现,则必须构建自己的数据库(如果您的应用程序需要这样做)。
基于这些原因,我所知道的大多数聊天应用程序都将FCM(用于推送通知)和在线数据库(用于持久性)结合起来用作后端服务。
答案 1 :(得分:0)
我发现弗兰克(Frank)的评论对于“排序的用户ID组成的键”非常有趣。我可能会将其用作数据库中的聊天键(实时/ firestore),但是,对于通知,我认为我仍然会为每个用户使用一个主题-这样,我就可以避免通知发布消息的用户。如果那不是问题,那么每个聊天室只讨论一个主题即可。
还要提到弗兰克,我可能会在所有主题名称中使用额外的键,以使它们真的很难猜到。 (但请稍后再添加,这样您就不会因非核心内容而分心)
In this answer,您有一个示例,该示例介绍如何使用onCreate触发器将通知发布到主题(从功能后端)。
在浮动代码中,您可以使用subscribeToTopic
插件中的firebase_messaging
开始收听主题。
注意:如果您的应用将支持用户注销(可能会支持:)],那么您还必须delete the token in the device以避免收到来自上次登录用户的通知。