gpt4 book ai didi

flutter - 如何为聊天应用构建 Firestore

转载 作者:行者123 更新时间:2023-12-05 05:47:40 25 4
gpt4 key购买 nike

我将要使用 firestore 创建一个一对一的聊天应用程序。特点如下:

  • 用户可以看到他之前聊天的联系人列表。
  • 聊天室中看不见的消息数。
  • 最后一条消息和时间。

我认为我的 Message 模型类如下:

  • messageId (UniqueId),
  • 发件人编号
  • receiverId
  • 留言
  • 时间
  • isSeen(bool,默认值false)

现在假设 user1user2 进行了对话。我正在考虑通过以下方式为聊天创建一个单独的根集合(chats):

chats(col) --> user1 --> chats(col) --> chatRoomId --> messages(col) --> messageId1
--> messageId2
--> messageId3
--> user2 --> chats(col) --> chatRoomId --> messages(col) --> messageId1
--> messageId2
--> messageId3

这种方法的问题在于 - 将有重复的数据,例如为两个用户分别存储相同的消息。另外更新消息会很麻烦,因为消息需要在两个位置更新。

所以牢记所有要求,什么是更好的结构?

最佳答案

不确定这是否是最好的方法,但我构建 firestore 的方式:

我有一个名为 groups集合,用于群聊和一对一聊天。 groups 包含以下信息:

  • chatID(与特定 groups 行的 ID 相同)
  • 成员(该聊天中所有参与的应用用户的用户 ID,也用于检索用户的聊天)
  • 最近的消息文本
  • 最近的消息发送时间
  • 最近的消息发送者
  • 阅读者
  • chatTitle(可以为空,因为一对一不需要)
  • 聊天类型(表明是群组聊天还是一对一聊天)

在 ChatOverviewScreen 中,我有一个 firestore 查询,它只从 groups 中检索文档,该文档在 members 字段中包含他的 userID

因此,在 ChatOverviewScreen 中,您现在可以显示用户拥有的所有聊天记录,并且您已经知道检索属于特定聊天记录的消息所需的 ID 引用。

所有消息都存储在一个名为 chats 的集合中,其中每个 documentID 也可以在 groups 文档中找到。 chats 中的每个文档都包含一个包含所有消息 的集合。

以下链接也很有用:https://levelup.gitconnected.com/structure-firestore-firebase-for-scalable-chat-app-939c7a6cd0f5

关于flutter - 如何为聊天应用构建 Firestore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70954873/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com