2017-10-19 79 views
0

在我的iOS應用程序中,我使用firebase observeEventType:FIRDataEventTypeChildChanged來獲取特定節點的實時更新。但是,當用戶進入離線節點更新幾次。但是,當用戶來到在線用戶無法獲得以前的更新。有沒有解決方案?FIRDataEventTypeChildChanged不能用於脫機?

回答

3

Firebase實時數據庫同步狀態。它確實(明確)不同步所有中間狀態更改。

如果在客戶端處於脫機狀態時同一節點發生多個更改,則實際上只會看到最終狀態。

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 可以看到值4也取決於精確時值5被寫入。但它絕對不會看到值3.

如果您希望在重新連接時將每個狀態更改傳送到客戶端2,則應該將確切的狀態更改存儲在數據庫中。因此,不是存儲結果值,而是存儲操作。喜歡的東西:

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

現在,如果您的客戶端偵聽/Changes,可以保證它看到發生的所有變化。

+0

是的。但是,當用戶脫機時,它已經添加了幾個新的子節點。然後用戶重新連接,不會接收'observeEventType:FIRDataEventTypeChildChanged'的更改。但更改接收「FIRDataEventTypeValue」和「FIRDataEventTypeChildAdded」,重新連接後不會發生任何更改。 – isuru