Firebase:如何在 iOS 应用被停用并重新启动后保留用户 Feed



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

通过阅读Firebase文档,我的理解是,可以通过启用持久性并将keepSynced设置为true来添加此离线功能,就像我在下面的代码中所做的那样。 我是否需要使用核心数据才能在应用停用并重新启动后将 Feed 中最近的 10 篇帖子保留在存储中,或者 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)
})
}

我意识到我的错误:在我的函数retrieveFeed中,我还调用FirebaseStorage来检索图像(Firebase目前不支持缓存(。 这些调用未在设置持久性和同步时正确完成。 一旦我使用此 pod (https://github.com/antonyharfield/FirebaseStorageCache( 调整了这些调用,它就开始工作了!

最新更新