Таймеры фоновых задач на iOS

У меня есть приложение для Android/ Winphone. Небольшая часть приложения (фоновый вещательный приемник / задание) время от времени (около 10-15 минут) проверяет локальный файл с временными метками, а если разница между одной из временных меток и текущим временем становится больше, скажем - 30 минут, то отображается уведомление для Пользователь.

В Android я использую AlarmManager.setRepeating(...) для настройки периодической проверки, и для запуска этого кода установки я регистрирую BroadcastReceiver для действия "android.intent.action.BOOT_COMPLETED" в манифесте. Или вызывайте AlarmManager.cancel(...) и AlarmManager.setRepeating(...) при каждом запуске. Таким образом, я могу быть уверен, что мои таймеры работают.

В Windows Universal я использую триггеры и фоновые задачи. Это работает так же с некоторыми ограничениями.

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

1 ответ

Решение

Вы можете использовать фоновую выборку для быстрого выполнения. Но есть несколько недостатков:

  1. Не работает в режиме сна.

  2. Вы не можете перехватить событие запуска устройства.

  3. Он будет сброшен через 30 секунд.

Я думаю, что в общем случае это не аналог для AlarmManager, Забудь об этом.

https://www.raywenderlich.com/92428/background-modes-ios-swift-tutorial

https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

Push-уведомление может использоваться как триггер. Но, тем не менее, это реализация на стороне сервера.

В руководстве выше:

  1. Установите флажок Выбор фона в режимах фона возможностей вашего приложения.

  2. использование setMinimumBackgroundFetchInterval(_:) установить интервал времени, подходящий для вашего приложения.

  3. Воплощать в жизнь application(_:performFetchWithCompletionHandler:) в вашем приложении делегат для обработки фоновой выборки.

Ваше событие обратного вызова performFetchWithCompletionHandler

Другие вопросы по тегам