【问题标题】:How to disable Firebase Realtime Database iOS write offline如何禁用 Firebase 实时数据库 iOS 离线写入
【发布时间】:2019-05-13 07:07:07
【问题描述】:

我有一个案例,在没有互联网的情况下调用setValue() 时,firebase 数据库返回成功。成功后,该值不会在数据库中更新。我正在使用以下代码(在 Swift 中):

Database.database().reference().child("key").setValue("something") { (error:Error?, ref:DatabaseReference) in
        if error != nil {
            // Show error in UI
        } else {
            // Show done in UI
        }
}

我阅读了文档,它说 Firebase 数据库使用离线写入。我们如何禁用它?

离线写入数据

如果客户端失去其网络连接,您的应用 将继续正常运行。

连接到 Firebase 数据库的每个客户端都维护自己的 任何活动数据的内部版本。数据写入时, 先写到这个本地版本。然后是 Firebase 客户端 将该数据与远程数据库服务器和其他服务器同步 客户在“尽力而为”的基础上。

p/s:我禁用了离线持久化功能

【问题讨论】:

  • setValue() 完成侦听器不会为本地写入触发。只有在服务器上提交(或拒绝)数据后才会触发。

标签: ios swift firebase firebase-realtime-database offline


【解决方案1】:

根据文档,您最好在应用离线时使用keepSynced(false)

https://firebase.google.com/docs/database/ios/offline-capabilities

let scoresRef = Database.database().reference(withPath: "scores")
scoresRef.keepSynced(false)

【讨论】:

  • 和tat有关吗?据我了解,keepSynced用于下载数据并存储在本地,但未提及包括写入。你能详细解释一下吗?
  • 这种情况,需要先添加AlamofireReachability来检查设备是否离线,如果离线,则跳过该块。
【解决方案2】:

Firebase 的构建前提是它为用户和开发者透明地处理间歇性连接中断(大部分情况下)。当客户端未连接到服务器时,没有禁用本地写入的功能。

但是您可以通过侦听.info/connected 并在该位置为false 时在您的应用中禁止写入操作来实现这一点。有关这方面的更多信息,请参阅 Firebase 文档中的 detecting connection state

【讨论】:

  • 我注意到 .info/connected 并尽量避免 tat,因为它会使应用程序逻辑复杂化。这是唯一的方法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-30
  • 2020-05-31
  • 2020-04-20
  • 2018-12-29
  • 2021-07-03
  • 2017-01-12
  • 2019-10-11
相关资源
最近更新 更多