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

我有个好主意,如何根据此https://firebase.google.com/docs/database/ios/offline-capabilities在较高级别上工作-Firebase本质上保留了可在脱机时访问的数据的缓存副本。

我不明白的是,我的观察员应该开枪多少次,并提供什么信息。

  • firebase是否总是先触发所有缓存数据(如果没有任何数据,则为null),然后再触发服务器数据一次触发我的观察者。
  • 还是仅发送缓存的数据(如果存在)和服务器数据一起发送。
  • 在持久性模式下,observerSingleValue和连续观察者的行为之间是否有区别?

  • 在启用了持久性的应用程序中,我注意到:
  • Firebase仅发送服务器数据
  • Firebase发送缓存的数据(如果存在),然后发送服务器数据。
  • Firebase发送缓存的数据,如果不存在此数据,则为null,其后为服务器数据。

  • 最好将其清除,以便我们知道应该是正常行为:)

    最佳答案

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

  • 立即引发所有完整的缓存数据的事件。
  • 从服务器请求更新的数据,当数据到达时,如果数据与缓存的数据不同,则引发新事件。

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

  • 希望这可以帮助!

    09-27 05:27
    查看更多