【发布时间】:2019-02-12 13:25:21
【问题描述】:
我很难弄清楚如何正确构建多用户聊天室 FirebaseDatabase 架构。
基本上,该应用程序支持用户之间的私人消息(可以是 2 个用户或多个用户之间)。如果只是在 2 个用户之间,数据结构真的很简单。
我正在尝试降低成本(我不希望当前登录的用户正在与某人聊天并且观察者收到与此特定聊天无关的所有消息)并正确构建数据.如果仅在 2 个用户之间,我总是可以在当前用户 ID 下添加接收者并仅查询该节点。但是对于多个用户(甚至不确定其中有多少),我需要依赖聊天室 ID,但我很难做到这一点。
所以,这里的想法,假设用户选择另一个开始聊天。我在想这样的事情:
我面临的问题是维护chatId。每次用户要发送新消息时,如何根据chatId 检查是否已经与相同的接收者(或多个接收者)进行了聊天。这对我来说是令人困惑的部分。我已经坚持了好几天了,我想不出一种正确的方法来维护chatId 并正确查询它。欢迎任何帮助。
【问题讨论】:
-
我通常建议使用基于参与者 UID 的“房间 ID”。这意味着您将始终为相同的参与者获得相同的房间 ID。有关这方面的一个简单示例,请参阅stackoverflow.com/questions/33540479/…
-
@FrankvanPuffelen 如果你有 30 个参与者怎么办?
uid会不会太长?我不确定Firebase中的id长度是否有最大限制。比如,假设你的典型用户uid是这么长的5JiKVeb2FmdMD626iyYjRyKDkkf2。现在,如果我们获得所有用户uids,是否会被允许/接受为roomId值,因为它会很长? -
在这种情况下,您可以对连接的 UID 进行哈希处理。碰撞的机会对我来说似乎很小。或者,您可以为每个用户创建单独的房间 ID 查找,如下所示:stackoverflow.com/questions/51885395/… 和 stackoverflow.com/questions/50146628/… 和这里 stackoverflow.com/questions/48178492/…
标签: swift firebase firebase-realtime-database