#xamarin #xamarin.forms #xamarin.ios #background-process #background-fetch
#xamarin #xamarin.forms #xamarin.ios #фоновый процесс #фоновая выборка
Вопрос:
У меня есть Xamarin.Формирует приложение, в котором пользователи создают «списки», а затем отправляют их на сервер (вызов Http api). У нас есть вариант использования: пользователь создает список, но на данный момент у него нет подключения к Интернету, поэтому список будет находиться в состоянии «ожидания». Затем пользователь может запустить приложение в фоновом режиме (оно больше не активно). В какой-то момент позже у пользователя теперь будет подключение к Интернету, я хочу, чтобы приложение автоматически отправляло эти ожидающие объявления без необходимости пользователю снова открывать приложение.
В настоящее время я ищу способ сделать это в реализации Xamarin для iOS.Формирует приложение, а также необходимо будет сделать что-то подобное с реализацией Android.
Я уже рассматривал фоновую выборку для iOS, но на данный момент кажется, что performFetch вызывается редко, даже если я установил интервал в backgroundfetchminimum, поэтому он может быть недостаточно надежным. Также я прочитал в документах iOS, что код performFetch не должен выполняться более 30 секунд, иначе он будет «оштрафован» и еще больше ограничит интервал. К спискам могут быть прикреплены большие изображения или видеоролики, и для их отправки может потребоваться более 30 секунд.
Комментарии:
1. performFetch — это не тот API, который вы ищете. Взгляните на NSURLSessionUploadTask. CreateUploadTask, с некоторыми хорошими документами для начала здесь: developer.xamarin.com/guides/ios/application_fundamentals /…
2. Прочитайте документы, и, похоже, NSUrlSsession — это то, что мне нужно для этого варианта использования для iOS. Спасибо за предложение
Ответ №1:
NSURLSessionUploadTask обрабатывает проблему с подключением. Вы также должны реализовать обработчик didCompleteWithError и снова поставить в очередь ту же загрузку, если предыдущая задача была выполнена неправильно.
Есть хороший пример github от Роба Гиббенса. Он реализует NSURLSessionDownloadTask, но вы будете использовать NSURLSessionUploadTask вместо этого с тем же подходом.
Рассмотрите возможность использования MessagingCenter для очистки кода в вашем проекте.
Комментарии:
1. Спасибо за предложение об использовании NSUrlSessionUploadTasks для iOS и за то, что поделились этим примером на github, поскольку в нем также есть кое-что для реализации чего-то для Android. Я пытался использовать JobScheduler на Android, чтобы сделать что-то подобное с NSURLSession, но он не кажется таким надежным, как NSURLSession, поскольку он не запускает задание немедленно, даже если есть сетевое подключение, в отличие от NSURLSession