【问题标题】:Firebase data structure for one to chat app or private用于聊天应用或私人的 Firebase 数据结构
【发布时间】:2020-04-30 01:09:30
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: javascript firebase firebase-realtime-database


    【解决方案1】:

    当用户发布产品(潜在卖家)时,您需要将他们的用户 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
      }
    }
    

    【讨论】:

    • 感谢您的帮助。我对嵌套聊天感到困惑。为什么我必须这样做。我还应该在那里存储哪些属性?请需要帮助。我有这样的产品数据结构user user_id product prodcut_id products: title:’’ description:’’
    • 如前所述:user_chats JSON 结构将聊天与单个用户相关联。让用户登录后,您首先要读取他们的 UID (/user_chats/$uid) 的结构,以确定向他们显示哪些聊天/房间。您在此处包含的信息是您需要在聊天/房间的初始列表中向用户显示的任何信息。然后,一旦用户单击单个聊天/房间,您就会从相关的 /chats/$roomid 节点加载完整的消息列表。
    • @FrankvanPuffelen 问题是如果uid1 删除了一条消息,它就不会出现在uid2 聊天中。因为您将实际(原始)聊天与两个用户相关联。
    • 您真的希望它们保持原样吗?这是非常不寻常的。但如果这样做,则必须为每个用户创建单独的聊天室。所以你会有uid1_uid2_productiduid2_uid1_productid。我更新了我的答案以显示 JSON。
    猜你喜欢
    • 1970-01-01
    • 2017-01-04
    • 2018-06-01
    • 1970-01-01
    • 2018-03-03
    • 1970-01-01
    • 2017-06-28
    • 2017-11-16
    • 1970-01-01
    相关资源
    最近更新 更多