2017-06-14 123 views
1

对不起我的英语水平不好,我来自阿根廷。在聊天应用程序中Firebase实时数据库结构

我在火力地堡以下信息数据结构:

"messages" 
    "-KezmqXSdKCNFFA432Uc___-KfCEwklG_y3naRDIUiY" 
     "messageDate": "20170620" 
     "messageTime": "18:44" 
     "message": "Hi" 
    "-KezFDSAADFASFFS3221___-KASDF32324SDFASD1FS" 
     "messageDate": "20170620" 
     "messageTime": "22:23" 
     "message": "How are you?" 

-KezmqXSdKCNFFA432Uc-KfCEwklG_y3naRDIUiY-KezFDSAADFASFFS3221-KASDF32324SDFASD1FS是用户。

我的问题是,我在“messages”节点中创建了一个childEventListener来接收新用户消息,但我收到了所有用户的新消息(我登录了一个用户每个应用程序),因为我的childListener在“消息”节点。

它是正确的,如果我有1000个用户添加的消息时,新邮件到达1000个用户? (假设在应用程序内,您可以检查该消息属于哪个用户)。

谢谢!

+0

你有聊天室或只有那些1000个用户提供单一的聊天室? –

+0

这不是聊天室。这是一个类似whatsapp的应用程序。问题是“Messages”节点中的childlistener。该节点具有所有用户的所有消息,然后如果用户将消息发送给另一个用户,则它到达所有用户。 – Agustin

回答

0

这种结构不支持你想要做什么,它更好地使用类似通道,其中一个通道包含两个人之间的信息进行更改,所以当它们中的任何一个发送消息的其他人会被通知。

+0

我明白了,但是我应该为两个用户之间的每次对话创建频道,并让这些用户通过儿童听众收听该频道?在这种情况下,你是否应该创建动态频道和动态childevents? – Agustin

+0

一旦其中一个人向其他人发送消息并将其添加到两个用户频道列表中,就可以创建该频道,您可以使用firebase功能在数据库中添加trigers以发送推送通知或在频道节点上添加一个监听器,以及测试用户是否拥有该频道,或在指定节点上添加事件侦听器 –

+0

在这种情况下,应该将用户连接到与对话数量相同的孩子侦听器。这是正确的方式? – Agustin

6

如果你做一个结构类似与此类似:

-chats 
    - chatUID 
     - members 
      - userUID 
     - lastMessageSent:messageUID 
     - ... more properties 

-chatMessages 
    - chatUID 
    - messageUID 
     - sentBy: userUID 
     - messageDate:"" 
     - messageTime:"" 
     - message:"" 

-userChats 
    - userUID 
     - chatUID 

可以附加一个侦听/ userChats/userUID,这将显示当前聊天,和一个监听器/ chatMessages/chatUID,这将让针对特定聊天对话的所有聊天消息。

这种方式更容易建立火力安全规则很多,而用户只会收到他们相隔的聊天消息。

+1

我明白了。无论如何,我需要从firebase实现函数和触发器,对吧? – Agustin

相关问题