首页 > 解决方案 > 用于聊天应用或私人的 Firebase 数据结构

问题描述

目前我正在开发一个需要添加聊天功能的网络应用程序。一个用户发布他的产品,另一个有兴趣的用户可以和卖家聊天,留下或了解更多关于产品的细节。

我卡在聊天植入上,找不到适合需要的数据结构。我的需要是;假设约翰是卖家并发布他的手机进行销售。查尔斯对约翰的电话很感兴趣,他想知道更多的细节,所以开始和约翰聊天。他们在聊天之前并不认识对方,不像 WhatsApp。用户在发送消息之前认识另一个用户的位置。约翰本可以发布这么多产品,查尔斯可能会对他的不同产品感兴趣,因为每个产品都会创建一个新的对话(聊天)。

我想要这样,如果 john 删除一条消息,那么应该从他的聊天中删除,而不是从 Charles 中删除。

聊天是私人的或一对一的。

到目前为止,我已经完成了这个数据结构。不知道是不是最好的办法?请建议我

chats
    sender_ID _ Reciever_id
        product_id
            message:''
            Timestamp:''
            SenderName:''

标签: javascriptfirebasefirebase-realtime-database

解决方案


当用户发布产品(潜在卖家)时,您需要将他们的用户 ID 与该产品相关联。基于此,感兴趣的用户(潜在买家)可以建立联系。

鉴于您的其他要求,我会嵌套聊天:

chats: {
  uid1_uid2_productid: {
    pushid: { message: ..., timestamp: ..., sender: ... },
    pushid: { message: ..., timestamp: ..., sender: ... }
  }
}

然后将这些聊天与用户特定列表中的正确用户相关联:

user_chats: {
  uid1: {
    uid1_uid2_productid: true
  },
  uid2: {
    uid1_uid2_productid: true
  }
}

您也可以存储一个值(或更多属性)来代替true您显示该特定用户的聊天列表。


如果您希望每个用户拥有一个完全独立的聊天/房间副本,您最简单的方法是复制房间。所以:

chats: {
  uid1_uid2_productid: {
    pushid: { message: ..., timestamp: ..., sender: ... },
    pushid: { message: ..., timestamp: ..., sender: ... }
  }
  uid2_uid1_productid: {
    pushid: { message: ..., timestamp: ..., sender: ... },
    pushid: { message: ..., timestamp: ..., sender: ... }
  }
}

接着:

user_chats: {
  uid1: {
    uid1_uid2_productid: true
  },
  uid2: {
    uid2_uid1_productid: true
  }
}

推荐阅读