Всем привет 🙂
Подскажите, пожалуйста, может кто в курсе. Есть необходимость запускать задачи в бэкграунде по четкому расписанию. Т.е. есть приложение, которое может быть запущено, пользователь авторизируется с использованием WebView, получает свое расписание. Дальше апка может быть свернута или экран может быть заблокирован. В течении нескольких часов нужно по четкому расписанию запускать задачи, которые будут в течении нескольких минут проигрывать аудио из сети и управлять сторонним приложением через его SDK. Далее ждать следующего ивента в расписании. Нет нужды запускать задачи после закрытия приложения или перезагрузки телефона. Минимально необходимая версия iOS: 14, желательно с 12, ранее 12 поддержка не нужна
Проблема в выполнении бэкграунд задач по расписанию. Что было рассмотрено:
- Запуск бэкграунд задачи при переходе апки из активного состояния. Однако, iOS убивает задачу через пару десятков секунд, соответственно, нужные вещи не могут быть запущены через несколько часов
- Планирование бэкграунд задачи на выполнение через определенный интервал времени. Однако, iOS меняет этот интервал на свое усмотрение в зависимости от состояния батареи, загруженности системы, истории использования апки и т.д.
- Удержание апки от закрытия аудиоплеером, который проигрывает тишину. Однако, боюсь, что апка не пройдет ревью на App Store. Да и расход батареи неоправданно возрастет
- Использование виджета. Однако, его задачи тоже ограничены во времени, а планирование новых имеет минимальный интервал в 5 минут. Это не дает возможности выполнить задачу в любой нужный момент. Также есть вероятность, что слишком активный виджет прибьет система. Плюс непонятно, можно ли запустить из виджета бэкграунд задачу в апке, непонятно как быть с авторизацией в стороннем SDK, если выполнять нужный функционал в виджете
- Использование локальных уведомлений. Идеальное соответствие расписанию. Однако didReceiveNotificationResponse не отрабатывает в бэкграунде, а задача должна быть запущена без участия пользователя
- Использование удаленных уведомлений. Кажется, единственный рабочий вариант. Имеет недостатки, такие как подключение сервиса пушей, вовлечение в функционал расписания бэк-энда, возможные задержки в доставке
Исследуя как пишут приложения, например, будильников, понял, что используют или создание ивентов в календаре/ремайндере или локальные уведомления, что не решает моих задач
Подскажите, пожалуйста, ничего ли я не упускаю? Как по-красоте реализовать такой функционал?
Спасибо всем дочитавшим 🙂 И спасибо всем, кто поможет пролить свет на этот вопрос 🙂