2017-10-19 9 views
0

私のiOSアプリケーションでは、firebase observeEventType:FIRDataEventTypeChildChangedを使用して、特定のノードのリアルタイム更新を取得しています。しかし、ユーザーがオフラインになると、ノードは数回更新されます。しかし、ユーザーがオンラインになると、ユーザーは以前の更新を取得できません。これには解決策がありますか?FIRDataEventTypeChildChangedがオフラインで動作していませんか?

答えて

3

Firebase Realtime Databaseは状態を同期します。すべての中間状態の変更を(明示的に)同期化しません。

クライアントがオフラインのときに同じノードに複数の変更があった場合、実際には最終状態のみが表示されます。

Client1    Database    Client2 
              Start listener 
write 1  -->   1   -->  1 
write 2  -->   2   -->  2 
              Go offline 
write 3  -->   3      
write 4  -->   4      
              Go online 
            -->  4 
write 5  -->   5   -->  5 

したがって、上記の図では、クライアント2は値のみ1、2および5と値5が書き込まれる正確場合に応じて、あまりにも値4を参照してもよいでしょう。ただし、値3が表示されません。

再接続時に各状態の変更をクライアント2に通知する場合は、データベースに正確な状態の変更を保存する必要があります。したがって、結果の値を格納する代わりに、操作を保存します。ような何か:あなたのクライアントは/Changesに耳を傾けている場合今

Changes: { 
    "-PushId1": { value: 1 }, 
    "-PushId2": { value: 2 }, 
    "-PushId3": { value: 3 }, 
    "-PushId4": { value: 4 }, 
    "-PushId5": { value: 5 } 
} 

は、起こったすべての変更を確認することが保証されます。

+0

はい。しかし、ユーザーがオフラインになったときに、いくつかの新しい子ノードが追加されました。その後、ユーザーは再接続し、 'observeEventType:FIRDataEventTypeChildChanged'の変更を受け取りません。しかし、変更は 'FIRDataEventTypeValue'と' FIRDataEventTypeChildAdded'を受け取り、再接続後に何も変更されません。 – isuru

関連する問題