我正在使用Flutter和Firestore后端进行聊天功能。
每条消息都是Firestore集合中具有UID和文本字段的新文档。聊天是1:1和随机的,所以在进入聊天之前不知道用户将与谁交谈。聊天集合中的DocID都是自动id。
我已经阅读了可以使用主题来管理发送通知。这应该比使用单个设备fcm令牌更容易。
谁知道如何为这个随机的1:1聊天应用实现use topic?
发布于 2018-12-30 15:08:12
您绝对可以为每个1:1会话使用单独的主题,例如,使用我在此处描述的命名方案:Best way to manage Chat channels in Firebase。但是,正如Doug已经在他的评论中指出的那样,有一些事情需要考虑,导致大多数开发人员不只是将FCM用于他们的聊天应用程序。
例如: FCM主题不受保护。这意味着任何找到主题ID的人都可以订阅它,从而无意中听到1:1的对话。虽然您可以生成难以猜测的主题,但您不应该依赖于不知道主题ID作为一种安全机制。
考虑替代方案的另一个原因是FCM消息是暂时的:一旦它们被传递,就不再有任何痕迹。使用当前的Firestore实现,您可以查询数据库以显示所有消息,而使用纯FCM实现,您必须构建自己的数据库(如果您的应用程序需要这样做)。
出于这些原因,我所知道的大多数聊天应用程序都使用FCM (用于推送通知)和在线数据库(用于持久性)的组合作为它们的后端服务。
发布于 2019-01-02 22:22:57
我发现Frank关于“排序的userID组合键”的评论真的很有趣。我可能会使用它作为数据库中的聊天密钥(realtime/firestore),然而,对于通知,我认为我仍然会为每个用户使用一个主题-这样我就可以避免通知发布消息的用户。如果这不是问题,那么只需要为每个聊天室选择一个主题即可。
还提到Frank,我可能会在所有主题名称中使用额外的键,以使它们真的很难猜到。(但以后再添加,这样你就不会被非核心的东西分心了)
In this answer您有一个示例,说明如何使用onCreate触发器将通知发布到主题(从函数后台)。
在flutter代码中,您可以使用firebase_messaging插件中的subscribeToTopic开始侦听主题。
注意:如果你的应用程序支持用户注销,它可能会:),那么你也将不得不使用delete the token in the device来避免收到来自最后一个登录用户的通知。
https://stackoverflow.com/questions/53973441
复制相似问题