在我的iOS应用中,我使用firebase observeEventType:FIRDataEventTypeChildChanged
来获取特定节点的实时更新。但是,当用户离线时,节点会多次更新。但是,当用户来到在线用户无法获得以前的更新。有解决方案吗?
答案 0 :(得分: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
,则可以保证看到所有发生的更改。