Firebase的消息传递App数据库结构

时间:2017-12-23 00:23:28

标签: ios database firebase database-design

我正在使用Firebase构建应用。此应用程序的一个功能是聊天功能,用户可以向其他用户发送消息 - 没什么特别的,只有基于文本的用户到一个用户消息。所有在线描述如何实现此问题的教程(如this onethis one都使用匿名身份验证,因此许多原则似乎都不适用。我正在让用户进行身份验证,然后才能使用此功能。

我可以使用的两个主要功能是能够在我的应用程序的JSON数据库结构中修改特定路径的内容(添加,编辑,删除,更改顺序)并观察这些更改。当客户端发生时。我可以轻松地将每条消息放在同一个孩子中并监听对消息子进行的任何更改,然后通过查找与当前用户ID关联的消息将每条消息解析为客户端的对话。然而,这种方法似乎效率低下,因为在我看来,我必须过滤掉许多多余的消息。

对观察结构应如何工作的一般流程的描述,我需要在每条消息中包含的内容,以及如何有效地分类为单独的对话将非常有帮助。

1 个答案:

答案 0 :(得分:0)

大多数聊天应用都使用聊天室的概念,1:1个房间用于直接对话,或者用户组之间的命名空间。

您将每个房间建模为数据库中的节点,并且(仅)在房间ID下的该房间的消息:

chatrooms
  roomdid1:
    msg1: { from: ..., text: ..., timestamp: ... }
    msg2: { from: ..., text: ..., timestamp: ... }
    msg3: { from: ..., text: ..., timestamp: ... }
  roomdid2:
    msg4: { from: ..., text: ..., timestamp: ... }
    msg5: { from: ..., text: ..., timestamp: ... }
    msg6: { from: ..., text: ..., timestamp: ... }

要为房间加载消息,您只需收听该房间,例如/chatrooms/roomid1

有关基于其中用户的会议室命名约定的想法,请参阅http://stackoverflow.com/questions/33540479/best-way-to-manage-chat-channels-in-firebase