我在我的应用中使用Firebase 离线,以便在用户接收不良的情况下保留功能。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
FIRApp.configure()
FIRDatabase.database().persistenceEnabled = true
let all = FIRDatabase.database().reference(withPath:"all")
all.keepSynced(true)
...
但是,我注意到数据并不总是新鲜的。有时在其他地方修改的数据在强制退出之前不会显示。此外,有时在注销并重新登录后不会显示新创建的数据。
是否有可以手动执行同步的功能?
答案 0 :(得分:4)
不,Firebase不会导出手动数据库同步API。我怀疑他们不是因为云可扩展性等问题。
您现在可以做的最好的事情就是继续使用FIRDatabaseReference.keepSynced
API。文档使这一点有点明确(但肯定可以改进!):
通过在某个位置调用
keepSynced(true)
,该位置的数据将自动下载并保持同步,即使没有为该位置连接侦听器也是如此。此外,虽然位置保持同步,但不会从持久性磁盘缓存中逐出。
话说回来,在设计网络应用时,始终需要考虑 Fallacies of Distributed Computing 。特别是,前三个想到了:
- 网络可靠。
- 延迟为零。
- 带宽是无限的。
醇>
换句话说,设计最坏的和最好的希望: - )