首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Firebase云数据库支持聊天室中的新消息?

如何使用Firebase云数据库支持聊天室中的新消息?
EN

Stack Overflow用户
提问于 2020-08-07 20:08:42
回答 1查看 166关注 0票数 0

我有一个关于数据库建模的问题。我在我的安卓应用程序中使用Firebase数据库,我有一个名为chatRooms的集合。该集合中的每个文档都包含以下字段:

聊天室名称. messages).

  • Timestamp

  • 聊天室名称.

  • 聊天室图像.在聊天室中发送的最后一条消息(一旦在最后一条消息的中创建新文档后由防火墙函数触发)(也是由firebase functions).
  1. Users创建的--该聊天室中数据库中的用户路径列表(指向他们的文档).

每个文档还指向另一个集合messages,其中的每个文档包含:

消息发送方的

  1. Message.
  2. The名称。
  3. 消息发送方文档的路径。

我想添加支持的“看”选项,这意味着我想知道我是否有新的消息在聊天室。如果我进入所有聊天室的屏幕,我想知道是否有一个聊天室我没有看到,然后我可以“大胆”的聊天室(或做其他事情,以表明用户有新的消息在那个聊天室)。起初,我想在chatRooms级别创建一个数组,该数组将包含所有看到最新消息的用户。但我认为它可能会导致比赛条件,因为它需要时间的消防功能运行。在数据库中支持“新消息”的最佳方式是什么?我希望听到一个数据库建模建议(例如,保留哪个字段以及处理它的位置)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-07 20:36:53

最简单的方法是跟踪每个用户在每个聊天室中看到的最新消息的时间戳。您可以在客户端代码中这样做,无论是在为聊天室加载数据时,还是在屏幕上以类似于if (msg.timestamp > user["last_seen."+room_id]) userDocRef.update("last_seen."+room_id, msg.timestamp)的方式显示消息时。

然后,为了确定哪个聊天室有新消息,您可以比较该聊天室上一次更新的时间戳和该聊天室用户的最后一次似乎时间戳。

我会将这些值存储在用户的文档中,作为一个映射:$chatroomid: timestamp。这样,当用户文档被删除时,数据将自动清理,它具有与用户文档的其余部分一致的访问控制,而且您似乎不太可能想要为用户查询单独的房间时间戳,或者这些时间戳将超过文档的1MB大小限制。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63308561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档