针对不同用户的Firebase数据库子命名约定

时间:2017-10-05 15:31:51

标签: android firebase firebase-realtime-database

我正在使用firebase进行聊天活动。我列出了我的recyclerview中的所有用户联系人姓名,当点击特定联系人时,我打开一个名为chat.in的用户发送消息的新活动。要将消息推送到firebase我使用foll代码

mMessagesDatabaseReference = mFirebaseDatabase.getReference().child("messages");

现在我的孩子被命名为#34;消息",但所有用户都能看到每个人的消息,因为我只有一个孩子。 我的问题是我应该如何在firebase数据库中为我的孩子命名它应该是唯一的。例如,如果A消息到B和B消息到A,我想为他们单独的子节点。类似于其他用户。 有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:0)

您可以执行Firebase RealtimeDB文档推荐的基本结构:

{
  // Chats contains only meta info about each conversation
  // stored under the chats's unique ID
  "chats": {
    "one": {
      "title": "Historical Tech Pioneers",
      "lastMessage": "ghopper: Relay malfunction found. Cause: moth.",
      "timestamp": 1459361875666
    },
    "two": { ... },
    "three": { ... }
  },

  // Conversation members are easily accessible
  // and stored by chat conversation ID
  "members": {
    // we'll talk about indices like this below
    "one": {
      "ghopper": true,
      "alovelace": true,
      "eclarke": true
    },
    "two": { ... },
    "three": { ... }
  },

  // Messages are separate from data we may want to iterate quickly
  // but still easily paginated and queried, and organized by chat
  // conversation ID
  "messages": {
    "one": {
      "m1": {
        "name": "eclarke",
        "message": "The relay seems to be malfunctioning.",
        "timestamp": 1459361875337
      },
      "m2": { ... },
      "m3": { ... }
    },
    "two": { ... },
    "three": { ... }
  }
}

答案 1 :(得分:0)

我建议创建一个这样的结构:

/chat

因此,您不必创建一堆消息,而是先为每个对话创建数据库结构。有点像oldskool聊天室。

然后,您将新消息推送到名为" messages"的孩子下的每个聊天中。除了实际文本外,每条消息都应包含对作者的引用。

您可以在https://github.com/henrikenblom/chatapp查看我的玩具聊天项目,获取灵感。它是用Kotlin编写的,但它不应该很难翻译成Java。