用于一对一消息传递的 Firebase 数据库结构?
Posted
技术标签:
【中文标题】用于一对一消息传递的 Firebase 数据库结构?【英文标题】:Firebase database structure for one-on-one messaging? 【发布时间】:2021-10-05 13:12:34 【问题描述】:我对 Firebase 比较陌生,我正在尝试找出构建我的数据库以进行 1:1 聊天的最佳方法。
它基本上必须像 Whatsapp 一样运行 - 当有人发送消息然后将对话放在列表顶部时,您的活动对话位于左侧,右侧是基本的一对一聊天。
现在我最好的方法是创建一个 Firestore“聊天”集合
chats :
chat : users : [user_id, user_id], messages : user_id, message, created_at created_at
这个解决方案是否允许我:
根据登录用户获取所有聊天记录?
然后按日期对返回的聊天进行排序?
从消息集合中为每个返回的聊天获取最新消息?
在收到新消息时更改聊天顺序并更新最新消息?
如果所有这些都是可行的,这会有效还是有更好的方法?
任何帮助将不胜感激 - 谢谢!
【问题讨论】:
如果您有兴趣,我已经在我的tutorials 之一中解释了如何创建一个完整且功能齐全的 Firestore 聊天应用程序。 【参考方案1】:登录用户如何与他们参与的任何特定聊天相关联?
鉴于“user_id”嵌套在 chat
文档中,目前您的结构似乎无法轻松处理此问题。
就个人而言,这就是我会做的。
首先我将创建 2 个集合,一个名为 chats
一个名为 users
。
users
将具有以下结构:
"users":
"userID_1":
"name": "John",
"surname": "Smith",
"chats": [
"chatID_1",
"chatID_2",
"chatID_3"
]
,
"userID_2":
"name": "Betty",
"surname": "Sue",
"chats": [
"chatID_1",
"chatID_4"
]
聊天将改为这样存储:
"chats":
"chatID_1":
"chatName": "foo",
"otherInfo": "..",
"messages":
"messageID_1": "senderID": "..", "message": "..", "timestamp": 999,
"messageID_2": "senderID": "..", "message": "..", "timestamp": 999
,
"chatID_2":
"chatName": "bar",
"otherInfo": "..",
"messages":
...
这样,当用户登录时,您可以通过查询users.userID.chats
轻松获取他的所有聊天记录,并通过查询chats.chatID.messages
检索任何选定聊天的内容。
【讨论】:
谢谢,这似乎是正确的做法,并且与我正在查看的另一篇文章保持一致 skcript.com/svr/… 没有问题,如果你喜欢,记得给答案投票 :) !以上是关于用于一对一消息传递的 Firebase 数据库结构?的主要内容,如果未能解决你的问题,请参考以下文章
用于聊天应用的 Firebase 实时数据库或 Firestore? [关闭]
用于 Flutter 的 Firebase 云消息传递 - 可选择处理后台消息错误
Apple WatchOs 以及用于推送通知的 Firebase 云消息传递