构建像 Snapchat 这样的 Firebase 数据库

Posted

技术标签:

【中文标题】构建像 Snapchat 这样的 Firebase 数据库【英文标题】:Structuring Firebase database like Snapchat 【发布时间】:2018-12-18 07:55:07 【问题描述】:

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

我目前正纠结于如何最好地构建我的数据,以便我可以模仿一个简单版本的 Snapchat。

我想在我的简化版中做些什么:

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

我真的不需要更多的东西了。我并没有尝试实现 snapchats 当前的功能,即能够发送短信或类似的东西。我只想将图片发送给朋友,并将它们发布到公共信息流。

我的数据结构如下:

然后分解:

用户:

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

结构如下的个人消息:

这样的对话索引:

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

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

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

有什么建议吗?

我是否需要参考用户树中的聊天/消息?

【问题讨论】:

请不要在您的问题中包含图片。包括代码和结构作为文本。要获取您的 Firebase 结构,请使用 Firebase 控制台->导出 JSON 并复制粘贴您的结构的 sn-p。见images and links are evil 【参考方案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 子项的图片时,他们都会收到一个事件。

【讨论】:

以上是关于构建像 Snapchat 这样的 Firebase 数据库的主要内容,如果未能解决你的问题,请参考以下文章

我们如何使用 ArCore 在 Flutter 中实现类似 snapchat 的过滤器

类似 Snapchat 的 jquery 颜色选择器

可以像这样将 Auth0 集成到 Firebase 吗?

UICollectionView 布局像 SnapChat?

Tableview 像 Snapchat 发送功能(多选和可滑动标签)

颤动如何让gridview显示像按钮这样的firebase数据