Firebase:iOS应用程序被终止并重新启动后,如何保留用户供稿

时间:2018-07-02 05:29:59

标签: ios swift firebase firebase-realtime-database

我的应用程序中有一个TableView,该应用程序在启动时会从Firebase数据库加载用户的供稿。现在,如果用户终止了该应用程序并重新打开它,则TableView完全空白,并调用retrieveFeed函数以再次检索十个最新帖子。我希望这些帖子可以从设备本地加载,而不是从数据库服务器调用。

通过阅读Firebase文档,我的理解是,可以通过启用持久性并将keepSynced设置为true来添加此脱机功能,如下面的代码所示。在应用程序被终止并重启后,我是否需要使用Core Data来将Feed中的最新十个帖子保存在存储中?或者Firebase能够做到这一点?

在我的AppDelegate.swift中:

FirebaseApp.configure()
Database.database().isPersistenceEnabled = true

在我的DataService.swift(具有对Firebase的所有调用)中:

func retrieveFeed(queryNumber: UInt,  lastSeenKey: String?, completion: @escaping ([ Int: DataService.FeedQuote ]) -> ()){
    var dbquery = DatabaseQuery()
    if (lastSeenKey == nil){
        dbquery = self.user_ref.child(self.currentUserUserId).child("feed").queryOrderedByKey().queryLimited(toFirst: queryNumber)
    }
    else {
        dbquery = self.user_ref.child(self.currentUserUserId).child("feed").queryOrderedByKey().queryStarting(atValue: lastSeenKey).queryLimited(toFirst: queryNumber)
    }
    dbquery.keepSynced(true)
    dbquery.observeSingleEvent(of: .value, with: { (snapshot) in
        var FeedQuotes = [DataService.FeedQuote]()
        // ...
        // Data processing here
        // ...
        completion(correctlyOrderedFeedQuotes)
    })
}

1 个答案:

答案 0 :(得分:0)

我意识到自己的错误:在函数retrieveFeed中,我还调用了FirebaseStorage来检索图像(Firebase当前不支持其缓存)。通过持久性和同步设置,这些调用无法正常完成。一旦我使用此窗格(https://github.com/antonyharfield/FirebaseStorageCache)调整了这些通话,它便开始工作!