Firebase 离线 iOS:如何可靠地保持同步?

cds*_*per 0 synchronization ios firebase swift firebase-realtime-database

我在我的应用中离线使用 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)
...
Run Code Online (Sandbox Code Playgroud)

但是,我注意到数据并不总是新鲜的。有时在其他地方修改的数据直到强制退出才会显示。此外,有时在注销并重新登录后不会出现新创建的数据。

是否有手动执行同步的功能?

Pau*_*tos 5

不,Firebase 不会导出手动数据库同步 API。我怀疑他们不是因为云可扩展性问题等。

您现在能做的最好的事情就是继续使用FIRDatabaseReference.keepSyncedAPI。文档说明了这一点(但肯定可以改进!):

通过调用keepSynced(true)某个位置,该位置的数据将自动下载并保持同步,即使该位置没有附加侦听器。此外,当某个位置保持同步时,它不会从永久性磁盘缓存中删除。


话虽如此,在设计网络应用程序时,牢记分布式计算谬误总是值得的。特别是,前三个浮现在脑海中:

  1. 网络是可靠的。
  2. 延迟为零。
  3. 带宽是无限的。

换句话说,为最坏的情况设计并希望最好的:-)