Поддержка Firebase Offline: загрузка сообщений, когда пользователь не в сети, и синхронизация, когда пользователь выходит в сеть в приложении iOS Swift - PullRequest
0 голосов
/ 08 октября 2018

Я использую firebase в проекте iOS-Swift, в котором мне нужно включить автономную поддержку для загрузки сообщений, в сообщении есть изображение и подпись, как в Instagram, так что я хочу, чтобы пользователь находился в автономном режиме, и он / онона хочет загрузить сообщение, его / ее фотография сохраняется в кеше, а когда пользователь заходит в Интернет, фотография загружается и возвращает URL-адрес для загрузки, который мы можем использовать для сохранения сообщений - детали в базе данных.

примеркод:

                let photoIDString = UUID().uuidString
                let storageRef = Storage.storage().reference(forURL: "storage ref URL").child("posts").child(photoIDString)

                storageRef.putData(imageData, metadata: nil, completion: { (metadata, error) in

                guard let metadata = metadata else {
                    return
                }
                if error != nil {
                    return
                }
                storageRef.downloadURL(completion: { ( url, error ) in
                    guard let downloadURL = url else {
                        return
                    }
                    let photoUrl = downloadURL.absoluteString
                    self.sendDataToDatabase(photoUrl: photoUrl)
                    })
                }
                )

Я хочу знать, какие изменения я должен внести в свой код, чтобы обеспечить возможность автономной работы.Любой фрагмент кода поможет больше.

Ответы [ 3 ]

0 голосов
/ 22 октября 2018

Я не разработчик iOS, но я могу поделиться логическим потоком и некоторыми ссылками.

Когда пользователь нажимает на загрузку: Проверить, доступна ли сеть?

  • , если да:загрузить сообщение.
  • если нет:
    • сохранить сообщение в хранилище приложений или автономной базе данных
    • настроить приемник вещания на прием вещания, когда устройство подключается к сети. Эта ссылка может быть полезна.
    • загрузить сообщение, когда устройство подключится к сети.

Если вы ищете решение, предлагаемоеFirebase, вы можете найти более подробную информацию здесь .

0 голосов
/ 23 октября 2018

Firebase предлагает вам множество способов сделать это в своей документации.https://firebase.google.com/docs/database/ios/offline-capabilities

При загрузке на сервер Firebase он ставит себя в очередь и ждет, пока у него снова появится подключение к Интернету для загрузки.Если это происходит с тайм-аутом или вы хотите сделать это по-своему, просто попытайтесь загрузить с помощьюручки завершения с функциями setValue или updateChild - если не удалось и сообщение об ошибке вызвано интернетом, добавьте его в локальный кешна телефон с данными и путем к серверу firebase.

onLoad, повторите попытку загрузки до тех пор, пока она не удастся, как только это удастся, очистите локальный кеш.

0 голосов
/ 19 октября 2018

Проблема лучше рассматривать как повторную отправку на сервер при возникновении ошибки.Для вашего автономного случая вы можете проверить, является ли возвращение error сетевой ошибкой, или вручную проверить доступность сетевого подключения.

Вы можете создать массив для повторной отправки объекта, например

var resendList : [YourObjectType]

// when failed to send to server
resendList.append(yourFailedObject)

, а затем 2 решения:

  1. Проверьте подключение к сети вручную иПовторно загрузите, когда приложение станет активным в func applicationDidBecomeActive(_ application: UIApplication) в appDelegate.Для проверки подключения вы можете попробовать метод здесь: Проверить подключение к Интернету с помощью Swift Но проблема в том, что пользователь должен выйти из приложения и вернуться обратно с подключенной сетью

  2. Отслеживание (прослушивание уведомлений) об изменении подключения, используя метод предложения по https://stackoverflow.com/a/27310748/4919289, и перезагрузите его на сервер

и перебрать все объекты в resendList и заново загрузить.

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