像 Snapchat 一样构建 Firebase 数据库

Structuring Firebase database like Snapchat

我一直在研究 snapchat 克隆,以此来学习如何使用 firebase。

我目前一直在思考如何最好地构建我的数据,以便我可以模仿一个简单版本的 Snapchat。

我想在简化版中做的事情:

  1. 向多个用户发送图片消息
  2. Post 将图片消息发送到“故事”提要,我所有的朋友都可以看到它。

我真的不需要什么了。我没有尝试实现能够发送短信或类似内容的 snapchats 当前功能。我只想将照片发送给朋友,同时 post 将它们发送到 public 供稿。

我的数据结构如下:

分解:

用户:

用户之间的友谊结构如下:

个别消息结构如下:

这样的对话索引:

现在,我已经在堆栈和在线上看到大量用于在聊天应用程序中构建消息的 post。我坚持的是如何构建我的数据库,以便可以将消息发送给用户,以便只有接收用户的用户才能看到它。

我一直在阅读 firebase 文档,我知道我应该对数据进行非规范化,以便我可以更有效地读取数据,但我无法真正了解使用 Firebase 的最佳方式。

在我当前的 user-messages 实施中,我必须在我的代码中实施检查以查看消息是否由我的用户发送,然后阻止用户看到它。理想情况下,只有接收消息的人才能看到图像。 (就像 snapchat)

有什么建议吗?

我需要参考用户树中的 chat/message 吗?

问题似乎是

how to structure my DB so that a message can be sent to a user so that only that users receiving users see it

有很多'directions'但这里有两个。

1) 手动 'tell' 每个用户关于一张图片

users
  uid_0
    pics_for_me
      pic_0
        url: "http://...."
      pic_1
        url: "http://...."
    my_users
      uid_2: true
  uid_1
    pics_for_me
    my_users
      uid_0: true
      uid_2: true

有了这个结构,uid_1 有两个用户想与他们分享照片(uid_0 和 uid_2)所以当需要分享照片时,阅读 my_users 节点,对其进行迭代,并将 link 存储到该用户各自的 pics_for_me 节点中的图片。显然你可以存储其他数据,比如它来自谁等。当 uid_0 登录时,读取 pic_for_me 节点并查看图片,完成后可能会删除它。

2) 观察某个用户的图片节点

users
  uid_0
    name: "Henry"
  uid_1
    name: "Joe"

all_pics
  pic_0
   for_user: "uid_0"
   url: "http://..."

在这种情况下,uid_0 登录并向 all_pics 添加查询以查找包含其用户 ID 的任何 for_user。这适用于 1-1 情况,其中图片是针对一个用户的。如果您希望多个用户获得一张照片,那么...

all_pics
  pic_0
    uid_0: true
    uid_1: true

并且当用户登录时向 all_pics 添加一个查询,其中该用户的 uid 为真,然后任何时候添加具有其 uid child 的图片时,他们将收到一个事件。