2016-10-30 7 views
4

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

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

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

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

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

ответ

6

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

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

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

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

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

См: Apple Documentation


В качестве альтернативы, в зависимости от ваших потребностей, вы можете оставить Silent (push) Notification всякий раз, когда пользователи данных изменений на стороне сервера. Беззвучный толчок пробуждает ваше приложение, не уведомляя пользователя, поэтому вы можете получать данные и, возможно, информировать пользователя, планируя локальное уведомление.

Apple Documentation

+0

Что вы имеете в виду, вас наказывают? –

+0

@AkashRajput Вы получаете наказание, получая меньше времени, т. Е. Фоновая выборка срабатывает реже. – shallowThought

1

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

+0

WOW! Вы серьезно относитесь к этому? Для меня это невероятно, что у меня нет такой возможности. Как насчет 'NSBackgroundActivityScheduler', я нашел его в google, но в Swift 3.0 он не существует. – Mulgard

+0

Вы можете видеть из документации - https://developer.apple.com/reference/foundation/nsbackgroundactivityscheduler - что 'NSBackgroundActivityScheduler' для MacOS, а не для iOS. На iOS вам нужно использовать фоновое извлечение или нагрузка сервера – Paulw11