我正在与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
开始收听某个主题。
注意:如果你的应用程序支持用户注销[可能会:)],那么你还必须删除设备中的令牌,以避免收到最后一个登录用户的通知。