2017-10-08 104 views
0

我使用Firebase實施iOS匿名聊天應用。觀察特定的Firebase數據集

我的應用程序有一個聊天室列表,並單擊房間將加入羣聊喜歡Facebook Messenger。 數據庫的結構看起來像

rooms 
    |- AAA 
    |- messages 
     |- "aaaaa" 
     |- "bbbbb" 
     |- "ccccc" 
    |- BBB 
    |- messages 
     |- "ddddd" 
     |- "eeeee" 
    |- CCC 
    |- messages 
     |- "fffff" 
     |- "ggggg" 
    ... 

如果用戶加入的房間,例如AAABBB。應用程序將在本地存儲中存儲AAABBB。我如何觀察新消息已添加到AAABBB但不遵守CCC

我閱讀了Firebase的文檔。我可能有一些方法來做到這一點。

  1. 觀察整個rooms節點和在應用過濾AAABBB。但我認爲如果太多rooms會導致性能問題。數據量很大。
  2. AAABBB創建單獨的觀察者。它可以解決我的問題,但如果我的用戶加入太多rooms。觀察很多節點看起來沒有意義。
  3. 設置一個規則來控制哪些rooms可以同步。但我必須記錄一個用戶進入房間。我必須管理匿名用戶和聊天的關係。

有沒有更好的性能方式可以解決我的問題?

也許喜歡

['AAA', 'BBB'].observe(.childAdded, { 
    // do something 
}) 

或者任何建議,歡迎!

謝謝

回答

0

Firebase數據庫觀察者總是檢索整個節點。除了查詢的能力之外,沒有辦法檢索到部分節點。但在你的情況下,你不能使用查詢,因爲你不能在查詢中執行OR,並且聊天室可能不在一個範圍內。

如果您嘗試確保用戶所在的房間在離線時被緩存,則您可以在每個房間call keepSynced(true)。這實際上會添加一個空的偵聽器,以確保(磁盤)緩存保持最新狀態。

如果您想在sone上顯示多個聊天室,那麼您需要使用多個觀察者:每個聊天室一個。