gpt4 book ai didi

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

转载 作者:技术小花猫 更新时间:2023-10-29 10:09:20 27 4
gpt4 key购买 nike

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

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

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

  • firebase 是否总是首先使用任何缓存数据触发我的观察者一次(如果没有任何数据则为 null),然后是服务器数据。
  • 或者它是否只发送缓存数据(如果存在)和服务器数据。
  • 在持久模式下,observerSingleValue 和连续观察者的行为有什么区别吗?

在启用持久化的应用中,我注意到:

  • Firebase 只发送服务器数据
  • Firebase 发送缓存数据(如果存在)然后发送服务器数据。
  • Firebase 发送缓存数据,如果不存在则返回 null,然后是服务器数据。

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

最佳答案

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

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

虽然有一些微妙之处:

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

希望这对您有所帮助!

关于android - 在 Firebase 中启用持久性时实际发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37276499/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com