2017-10-08 10 views
0

私はFirebaseを使ってiOS匿名チャットアプリを実装しています。Firebaseの特定のデータセットを観察してください

私のアプリにはチャットルームのリストがあり、グループのチャットルームに参加するFacebookのメッセンジャーが参加します。 ユーザーが部屋に参加する場合は、データベースの構造は一例AAABBBため、

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

のように見えます。アプリはローカルストレージにAAABBBを保存します。 AAAまたはBBBに追加された新しいメッセージは確認できますが、CCCは表示されません。

私はFirebaseの文書を読みました。私はそれを行ういくつかの方法があるかもしれません。

  1. 全体roomsノードを観察し、アプリでAAABBBをフィルタリングします。しかし、私はそれがあまりにも多くの場合roomsがある場合、パフォーマンスの問題が発生すると思う。データサイズが非常に大きいです。
  2. AAABBBについて別々のオブザーバーを作成します。それは私の問題を解決する可能性がありますが、私のユーザーがあまりにも多くの人々に参加する場合rooms。多くのノードを観察することは理にかなっていないように見えます。
  3. roomsを同期できるルールを設定します。しかし、私はユーザーが部屋に入ることを記録しなければならない。匿名ユーザーとチャットの関係を管理する必要があります。

私の問題を解決できる方法はありますか?

は多分

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

が好き、または任意の提案を歓迎します!

ありがとう

答えて

0

Firebaseデータベースオブザーバは常にノード全体を取得します。部分的なノードを検索する方法はありませんが、クエリの能力を超えています。しかし、クエリでORを実行することができず、チャットルームが範囲内にない可能性があるため、あなたの場合はクエリを使用できません。

オフラインのときにユーザーの客室がキャッシュされるようにする場合は、各客室のcall keepSynced(true)にアクセスできます。これにより、(ディスク)キャッシュが最新の状態に保たれることを保証する空のリスナーが基本的に追加されます。

息子に複数のチャットルームを表示する場合は、複数のオブザーバーを使用する必要があります(各部屋に1つずつ)。

関連する問題