【问题标题】:How to structure chat with firebase如何构建与 Firebase 的聊天
【发布时间】:2018-05-02 11:09:29
【问题描述】:

我正在使用 Cloud Firestore (NoSQL) 为以下用户存储个人资料信息:

{
  "uid": "abc123",
  "name": "...",
  "friends": [
    "uid": "x234", 
  ]
  ...
}

现在我想知道如何构建从用户到用户的直接聊天。我正在考虑:

为每个用户文档添加一个附加字段,例如:

"chats": [
 {
    "from": "name",
    "message": "...",
    ...
 },
  ...
]

或者,我考虑使用具有类似结构的 Firebase 实时数据库,而不是使用 Firestore 进行聊天。

最后一种方法的好处是,用户文档不会因大量聊天协议而“臃肿”。

我需要一些建议,以便结构/实现最适合这个用例。

【问题讨论】:

  • 假设用户有一个他们可以查看的“朋友”列表。您可以对列表进行编程,当用户单击朋友时,代码会从 Firebase 中获取该“朋友”的 uid。然后,用户可以向该 uid 发送直接消息。接收者节点结构将有一个消息子节点,其中包含发送者 uid、消息和日期。然后,您可以使用 ListView 呈现直接消息。如果你愿意,我可以给你举个例子。
  • 据我了解,这类似于我的第一种方法?一个例子会很有帮助@SteveC。
  • 您看过这个 Firebase 示例 here 了吗?用户在帖子上“喜欢”或“cmets”的方式与您在特定用户之间实现直接消息传递/聊天的方式完全相同。先看看那个代码,如果你还需要帮助,请告诉我。这正是我用来创建音频聊天应用程序(cb 收音机)的方法。 ;)
  • firebase 文档中很好地解释了如何构建 yoru 数据库:firebase.google.com/docs/database/web/structure-data
  • 如果你还有兴趣,请看我编辑的答案,干杯!

标签: java android firebase firebase-realtime-database google-cloud-firestore


【解决方案1】:

当您开始构建应用程序时,首先需要考虑最适合它的数据库。如果您考虑 Firestore,您需要知道对于每个客户端每秒执行大量小规模读取和写入的应用程序,Cloud Firestore 的定价模型可能比实时数据库中类似性能的应用程序贵得多。

这两个数据库之间也存在一些差异。如果你想继续使用 Firebase 实时数据库,你需要知道你不能查询多个属性,它通常涉及重复数据或客户端过滤,在某些情况下这会有点混乱。实时数据库不会自动扩展,而 Firestore 会。

关于如何为聊天应用程序构建数据库,您需要知道没有完美的结构可以做到这一点。您需要以一种允许您以非常轻松且非常有效的方式读取/写入数据的方式来构建数据库。 Firebase official documentation 解释了如何为聊天应用构建数据库。如果你想要更复杂的东西,请阅读这篇文章,Structuring your Firebase Data correctly for a Complex App

为了更好地理解,我建议您也参加 Firebase 免费课程,Firebase in a Weekend: Android

所以由你决定哪一个更适合你。

PS:如果您有兴趣,我还在我的 tutorials 之一中解释了如何使用 Cloud Firestore 和 Kotlin 创建聊天应用程序。 p>

【讨论】:

  • 可以通过将消息分成 50 条消息块或每周块来优化阅读,并且仅当用户滚动到这些消息时才阅读。只需将最后 50 条消息保留在聊天 ui 窗口中,然后在用户需要时调用其余部分..
猜你喜欢
  • 2017-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-06
  • 2021-08-13
  • 2012-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多