聊天应用中的 Firebase 实时数据库结构

新手上路,请多包涵

抱歉我的英语水平不好,我来自阿根廷。

我在 Firebase 中有以下消息数据结构:

 "messages"
   "-KezmqXSdKCNFFA432Uc___-KfCEwklG_y3naRDIUiY"
         "messageDate": "20170620"
         "messageTime": "18:44"
         "message": "Hi"
   "-KezFDSAADFASFFS3221___-KASDF32324SDFASD1FS"
         "messageDate": "20170620"
         "messageTime": "22:23"
         "message": "How are you?"

其中 -KezmqXSdKCNFFA432Uc-KfCEwklG_y3naRDIUiY-KezFDSAADFASFFS3221-KASDF32324SDFASD1FS 是用户。

我的问题是我在“消息”节点中创建了一个 childEventListener 来接收新用户消息,但我收到了所有用户的所有新消息(我在每个应用程序中登录了一个用户),因为我的 childListener 在“消息”节点中.

如果我在添加消息时有 1000 个用户,一条新消息会到达这 1000 个用户,这是否正确? (假设在应用程序中,您可以检查该消息属于哪个用户)。

谢谢!

原文由 Agustin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 383
2 个回答

如果你做一个类似于这样的结构:

 -chats
   - chatUID
       - members
           - userUID
       - lastMessageSent:messageUID
       - ... more properties

-chatMessages
   - chatUID
     - messageUID
         - sentBy: userUID
         - messageDate:""
         - messageTime:""
         - message:""

-userChats
    - userUID
       - chatUID

您可以将侦听器附加到 /userChats/userUID,这将显示活动聊天,将侦听器附加到 /chatMessages/chatUID,它将获取特定聊天对话的所有聊天消息。

这种方式更容易设置 firebase 安全规则,并且用户只会收到他们分开的聊天消息。

原文由 Linxy 发布,翻译遵循 CC BY-SA 3.0 许可协议

感谢@Linxy 的精彩回答

我已经创建了一个关于@Linxy 答案的 firebase 数据库

在此处输入图像描述

这是完整的 JSON 导出

{
  "Chats" : {
    "-Lsfsd234xda" : {
      "lastMessageSent" : "-LrDEBo1-Message",
      "members" : [ "-LrDEBoLokW-5mhaT3ys", "-LrDEBoLokW-5mhaT3yz" ],
      "more_properties" : "goes here"
    }
  },
  "Users" : {
    "-LrDEBoLokW-5mhaT3ys" : {
      "id" : "-LrDEBoLokW-5mhaT3ys",
      "userDisplayName" : "Qadir Hussain",
      "userEmail" : "XXXXX.XXXX@gmail.com",
      "userPhotoUrl" : "https://lh3.googleusercontent.com/a-/AAuE7XXXXXXXXX"
    },
    "-LrDEBoLokW-5mhaT3yz" : {
      "id" : "-LrDEBoLokW-5mhaT3yz",
      "userDisplayName" : "Ishaq Bhojani",
      "userEmail" : "XXXXXXX.XXXXXX@gmail.com",
      "userPhotoUrl" : "https://lh3.googleusercontent.com/a-/AAuE7mB3KTbXXXXXXXX"
    }
  },
  "chatMessages" : {
    "-Lsfsd234xda" : {
      "-LrDEBo-MessageUID" : {
        "message" : "Hi there!",
        "messageDate" : "10/10/2019",
        "messageTime" : "10:16pm",
        "sentBy" : "-LrDEBoLokW-5mhaT3ys"
      },
      "-LrDEBo1-MessageUID" : {
        "message" : "Hello",
        "messageDate" : "10/10/2019",
        "messageTime" : "10:17pm",
        "sentBy" : "-LrDEBoLokW-5mhaT3yz"
      }
    }
  },
  "userChats" : {
    "-LrDEBoLokW-5mhaT3ys" : {
      "0" : "-Lsfsd234xda",
      "1" : "-Lsfsd234xda1",
      "chatUID" : "-Lsfsd234xda"
    }
  }
}

原文由 Qadir Hussain 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题