FIRDataEventTypeChildChanged无法脱机工作?

时间:2017-10-19 10:14:32

标签: ios objective-c firebase firebase-realtime-database

在我的iOS应用中,我使用firebase observeEventType:FIRDataEventTypeChildChanged来获取特定节点的实时更新。但是,当用户离线时,节点会多次更新。但是,当用户来到在线用户无法获得以前的更新。有解决方案吗?

1 个答案:

答案 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,则可以保证看到所有发生的更改。