Периодическая фоновая синхронизация

Я новичок в программировании iOS и теперь хочу реализовать периодическую фоновую синхронизацию, чтобы синхронизировать данные моего сервера с данными клиента. То, что я хочу достичь, сравнимо с Android SyncAdapter, где вы можете определить временной интервал (например, каждые 30 минут), и система автоматически запускает определенную задачу в фоновом режиме.

До сих пор я не мог найти такой механизм для Swift 3.0, поэтому мне нужно спросить, есть ли у кого-то опыт или какие-то подсказки для меня, как я могу этого добиться.

То, что я хочу сделать, звучит довольно просто:

Когда приложение запускается в первый раз, приложение должно настроить диспетчер синхронизации, который автоматически запускает фоновую задачу каждые 30 минут. Фоновая задача отвечает за синхронизацию данных сервера и клиента (с помощью Alamofire).

Как я могу это сделать?


person Mulgard    schedule 30.10.2016    source источник


Ответы (2)


Существует функция iOS под названием BackgroundFetch, которую вы можете настроить для

регулярно загружает и обрабатывает небольшие объемы контента из сети

Вы можете настроить minimumBackgroundFetchInterval.

Однако, в отличие от упомянутой функции Android, этот интервал не гарантируется.

ОС выполняет некоторую эвристику в черном ящике. Он вознаграждает вас за разумное (для ОС) потребление времени / мощности процессора, а также за частое использование пользователем. С другой стороны, вы получаете наказание за то, что разрядили батарею или (что еще хуже) никогда не использовались / не открывались пользователем.

См.: Образец Apple и

person shallowThought    schedule 30.10.2016

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

Как отмечает @ekscrypto в своем комментарии, вы можете использовать фоновую выборку для загрузки небольших объемов данных, когда система решает их получить. Однако у вас нет никакого контроля над тем, когда происходит эта выборка. Для получения дополнительной информации выполните поиск по запросу «Возможная выборка небольшого количества контента» в справочной системе Xcode.

person Duncan C    schedule 30.10.2016
comment
УХ ТЫ! Вы серьезно к этому относитесь? Для меня звучит невероятно, что у меня нет такой функции. Что насчет NSBackgroundActivityScheduler, я нашел его в Google, но в Swift 3.0 его нет. - person Mulgard; 30.10.2016
comment
Вы можете видеть из документации - developer.apple.com/reference/foundation/ - это NSBackgroundActivityScheduler для MacOS, а не для iOS. На iOS вам нужно использовать фоновую выборку или серверную загрузку - person Paulw11; 30.10.2016
comment
Вы определенно можете, посмотрите developer.apple. ru / library / archive / documentation / iPhone / в разделе, озаглавленном "Возможность извлечения небольшого количества контента". - person ekscrypto; 08.08.2018
comment
@ekscrypto, хороший аргумент в отношении гибкой выборки данных, но это не соответствует требованиям OP по выборке данных через регулярные промежутки времени. Вместо этого система решает, когда будет подходящее время для получения данных (я предполагаю, что когда горит сотовая связь или WiFi-соединение и есть прямой доступ к Интернету). - person Duncan C; 08.08.2018