在 Firebase 中启用持久性时实际发生了什么?

What actually happens when persistence is enabled in Firebase?

在 iOS 中打开 Firebase 的持久性时,我的观察者实际发生了什么以及他们在技术层面上的表现如何?

基于此,我很清楚它应该如何在高级别上工作https://firebase.google.com/docs/database/ios/offline-capabilities - Firebase 本质上保留了您可以在离线时访问的数据的缓存副本。

我不明白我的观察员应该开火多少次以及提供什么信息。

在我们启用了持久性的应用程序中,我注意到:

最好把它弄清楚,这样我们就知道哪个应该是正常行为了:)

其实很简单。当您附加观察者时(无论是使用 observeEventType 还是 observeSingleEventOfType),Firebase 将:

  1. 立即使用任何 完整 缓存数据引发事件。
  2. 从服务器请求更新的数据,当数据到达时,如果数据与缓存的不同,则引发新事件。

尽管如此,还是有一些微妙之处:

  • 我们只会在缓存数据完整时引发事件。这表示:
    • 如果我们没有缓存数据(您之前没有观察到这个位置),我们将不会引发 null 或类似的事件。在我们从服务器获取数据之前,您不会收到任何事件。
    • 如果您有此位置的 部分 数据(例如,您之前观察到 /foo/bar 但现在观察到 /foo),您将得到 ChildAdded 完整子项的事件(例如 /foo/bar),但在我们从服务器获取您正在观察的位置的完整数据之前,您不会得到 Value 事件(例如 /foo) .
  • 如果您正在使用 observeSingleEventOfType,您明确要求只请求一个事件,因此如果您有缓存数据,#1 会发生但#2 不会,这可能不是您想要的想要(你永远不会看到最新的服务器数据)。

希望对您有所帮助!