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

标签 android ios firebase firebase-realtime-database

在 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/

相关文章:

java - 尝试更改 android 上的 Firebase 数据库中的值时循环

android - Google Places API 总是返回错误

ios - 如何使 UIButton 文本动态化?

android - Firebase 实例 ID : deprecation of getId() in 21. 0.0

firebase - 在 Flutter 中从 Firebase 读取数组

android - 启动Android Studio时出现的一长串错误

android - 查看重叠的应用程序兼容性支持操作栏?

firebase - 安装 Pushwoosh 包后 React Native 应用程序关闭

ios - 如何为 iOS 应用程序创建带有动画的自定义 View 或控件?

ios - iOS session 已过期…需要再次登录才能收听rdio api的完整歌曲