Есть ли способ поставить задачу (т. Е. HTTP-запрос) в очередь для выполнения при наличии сетевого подключения?

#iphone #objective-c #ios #xamarin.ios

#iPhone #objective-c #iOS #xamarin.ios

Вопрос:

Есть ли способ поставить в очередь какую-либо исполняемую задачу (например, HTTP-запрос) для выполнения после установления сетевого подключения, учитывая, что приложение приостанавливается к моменту восстановления сетевого подключения?

Типичным сценарием было бы:

Пользователь в поезде открывает приложение. Они изменяют некоторое состояние внутри приложения, которое затем должно быть передано на какой-либо сервер. Затем пользователь закрывает / приостанавливает работу приложения. К сожалению, во время работы приложения iphone не получал сигнала и восстановил его только на следующей железнодорожной станции. На этом этапе восстановления соединения я хотел бы, чтобы была активирована какая-либо задача, чтобы она могла попытаться выполнить передачу измененного состояния на сервер.

Возможно ли это? Я также был бы рад, если бы задача могла быть реализована только как какая-то cron / запланированная задача, где задача могла бы проверять наличие подключения и периодически пытаться передавать.

Ответ №1:

Простой ответ — нет, текущая архитектура iOS не обеспечивает то, что вы хотите. Вы не можете явно запланировать выполнение произвольных операций в определенное время, когда ваши приложения не запущены.

Но если вы хотите рассмотреть «креативные» решения, я бы подумал в этом направлении:

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

Уведомления о местоположении — В вашем приложении создайте очередь сетевых операций, как вы пожелаете, если она будет постоянной. Добавляйте к ней события, пока вы работаете в автономном режиме. Затем зарегистрируйте свое приложение для событий местоположения «значительного изменения». Вы часто (извините; не могу точно сказать, как часто) получаете их, когда устройство отключается, а затем возвращается в другую сеть / вышку сотовой связи. Эти уведомления могут перевести ваше приложение в активное фоновое состояние, где вы затем можете попытаться запустить свою очередь постоянных сетевых операций.

Комментарии:

1. Если креатив — это все, что у меня есть, тогда я буду креативным!

Ответ №2:

Нет, если пользователь не перезапустит приложение, нет. Извините: (Вам не разрешена фоновая задача, подобная этой, на iPhone.

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