构建像 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 的过滤器
UICollectionView 布局像 SnapChat?