Таймеры фоновых задач на iOS
У меня есть приложение для Android/ Winphone. Небольшая часть приложения (фоновый вещательный приемник / задание) время от времени (около 10-15 минут) проверяет локальный файл с временными метками, а если разница между одной из временных меток и текущим временем становится больше, скажем - 30 минут, то отображается уведомление для Пользователь.
В Android я использую AlarmManager.setRepeating(...) для настройки периодической проверки, и для запуска этого кода установки я регистрирую BroadcastReceiver для действия "android.intent.action.BOOT_COMPLETED" в манифесте. Или вызывайте AlarmManager.cancel(...) и AlarmManager.setRepeating(...) при каждом запуске. Таким образом, я могу быть уверен, что мои таймеры работают.
В Windows Universal я использую триггеры и фоновые задачи. Это работает так же с некоторыми ограничениями.
Теперь я портирую свое приложение на iOS, и быстрый просмотр не дает мне способа зарегистрировать функцию или класс для выполнения быстрых проверок (в основном менее секунды) каждые 10 минут, пока само приложение не запущено, а также Я хотел бы зарегистрировать функцию при загрузке устройства. Является ли это возможным? Или я должен поддерживать приложение в фоновом режиме? Я бы предпочел не делать этого, так как мои чеки легкие и редкие.
1 ответ
Вы можете использовать фоновую выборку для быстрого выполнения. Но есть несколько недостатков:
Не работает в режиме сна.
Вы не можете перехватить событие запуска устройства.
Он будет сброшен через 30 секунд.
Я думаю, что в общем случае это не аналог для AlarmManager
, Забудь об этом.
https://www.raywenderlich.com/92428/background-modes-ios-swift-tutorial
Push-уведомление может использоваться как триггер. Но, тем не менее, это реализация на стороне сервера.
В руководстве выше:
Установите флажок Выбор фона в режимах фона возможностей вашего приложения.
использование
setMinimumBackgroundFetchInterval(_:)
установить интервал времени, подходящий для вашего приложения.Воплощать в жизнь
application(_:performFetchWithCompletionHandler:)
в вашем приложении делегат для обработки фоновой выборки.
Ваше событие обратного вызова performFetchWithCompletionHandler