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