2017-06-14 193 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

相關問題