0
在我的iOS應用程序中,我使用firebase observeEventType:FIRDataEventTypeChildChanged
來獲取特定節點的實時更新。但是,當用戶進入離線節點更新幾次。但是,當用戶來到在線用戶無法獲得以前的更新。有沒有解決方案?FIRDataEventTypeChildChanged不能用於脫機?
在我的iOS應用程序中,我使用firebase observeEventType:FIRDataEventTypeChildChanged
來獲取特定節點的實時更新。但是,當用戶進入離線節點更新幾次。但是,當用戶來到在線用戶無法獲得以前的更新。有沒有解決方案?FIRDataEventTypeChildChanged不能用於脫機?
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
,可以保證它看到發生的所有變化。
是的。但是,當用戶脫機時,它已經添加了幾個新的子節點。然後用戶重新連接,不會接收'observeEventType:FIRDataEventTypeChildChanged'的更改。但更改接收「FIRDataEventTypeValue」和「FIRDataEventTypeChildAdded」,重新連接後不會發生任何更改。 – isuru