Firebase: как сохранить фид пользователей после закрытия и перезапуска приложения iOS - PullRequest
0 голосов
/ 02 июля 2018

У меня есть TableView в моем приложении, которое загружает канал пользователя из базы данных Firebase при запуске приложения. Прямо сейчас, если пользователь убивает приложение и открывает его снова, TableView полностью пуст и вызывает функцию retrieveFeed, чтобы снова получить десять последних сообщений. Я хотел бы, чтобы эти сообщения загружались с устройства локально, а не вызывались с сервера базы данных.

Насколько я понимаю, читая документы Firebase, эту автономную возможность можно добавить, включив постоянство и установив keepSynced в true, как я делаю в коде ниже. Нужно ли использовать базовые данные, чтобы сохранить последние десять сообщений в ленте в хранилище после того, как приложение было убито и перезапущено, или 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 голосов
/ 03 июля 2018

Я осознал свою ошибку: внутри своей функции retrieveFeed я также обращался к FirebaseStorage для получения изображений (которые Firebase в настоящее время не поддерживает кэширование). Эти вызовы не завершились должным образом с настройками сохранения и синхронизации. Как только я настроил эти вызовы с помощью этого модуля (https://github.com/antonyharfield/FirebaseStorageCache),, он начал работать!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...