构建像Snapchat这样的Firebase数据库

时间:2018-07-10 12:51:54

标签: swift firebase data-structures firebase-realtime-database snapchat

我一直在研究snapchat克隆,以了解如何使用Firebase。

我目前在如何最好地构造数据结构上处于困境,以便可以模仿Snapchat的简单版本。

我想在简化版本中做什么:

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

我真的不需要什么了。我并不是在尝试实现能够发送文本消息之类的当前功能。我只想将图片发送给朋友,然后将其发布到公共提要中。

我的数据结构如下:

overall DB structure

并将其分解:

用户:

users

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

Friendships

结构如下的个人消息:

messages

这样的对话的索引:

enter image description here

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

我一直在阅读Firebase文档,我知道我应该对数据进行非规范化,以便可以更有效地读取数据,但是我无法真正用Firebase做到最好。

在当前的user-messages实现中,我将必须在代码中实现检查,以查看消息是否由用户发送,然后阻止用户查看消息。理想情况下,仅将消息发送给的人才能看到该图像。 (就像手套一样)

有关如何操作的任何建议?

我需要在用户树中对聊天/消息有一些参考吗?

1 个答案:

答案 0 :(得分:1)

问题似乎是

  

如何构造数据库,以便可以将消息发送给用户,以便   只有接收用户的用户可以看到

有很多“方向”,但这里有两个。

1)手动“告诉”每个用户有关图片的信息

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节点,对其进行迭代,并在其中存储指向该照片的链接用户各自的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

,当用户登录时,向该用户uid为true的all_pics添加查询,然后每次添加具有其uid子元素的图片时,他们都会收到一个事件。