#android #ios #flutter #background-fetch
#Android #iOS #flutter #фоновая выборка
Вопрос:
Я пытаюсь разработать приложение с flutter, которое использует пакет background_fetch https://pub.dev/packages/background_fetch подключаться в течение определенного периода времени к устройству BLE и получать некоторые данные о состоянии. На Android все работает нормально, и фоновая выборка запускается надежно каждые x минут.
На iOS это также работает, пока я имитирую фоновую выборку вручную через Xcode. Однако, когда я запускаю свое приложение на iPhone, фоновая выборка никогда не запускается. Для меня довольно сложно понять, есть ли у меня ошибка в моем коде или iOS действительно никогда не запускает фоновую выборку. Если ОС никогда не запускает фоновую выборку, как я могу ее запустить?
Из других сообщений я понял, что пока фоновая выборка работает в симуляторе, все запрограммировано правильно.
Может как-то объяснить мне простым способом, как работает механизм фоновой выборки на iOS?
спасибо и с наилучшими пожеланиями.
Ответ №1:
Я хотел бы поделиться некоторыми моментами, которые я начинаю понимать, пытаясь решить эту проблему:
Даже если на веб-сайте пакета указано, что iOS не поддерживает запланированные задачи, я не совсем понял, что это значит, потому что концепция использования фоновых задач не была или до сих пор не ясна мне на 100%.
Насколько я понимаю, это в основном означает, что единственным механизмом фоновой выборки, который поддерживает iOS, является фоновая выборка по УМОЛЧАНИЮ, которая выполняется в определенный период времени, определяемый параметром minimumFetchInterval . Это может быть минимум 15 минут или дольше, но никогда не менее 15 минут, и реализовано со следующим фрагментом из примера:
int status = await BackgroundFetch.configure(BackgroundFetchConfig(
minimumFetchInterval: 15,
stopOnTerminate: false,
enableHeadless: true,
requiresBatteryNotLow: false,
requiresCharging: false,
requiresStorageNotLow: false,
requiresDeviceIdle: false,
requiredNetworkType: NetworkType.NONE
),
Однако вы не можете по-настоящему протестировать событие выборки — ни с симулятором, ни с реальным устройством.
С помощью Xcode вы можете имитировать фоновую выборку, запустив ее из среды IDE. Но фоновая выборка НИКОГДА не произойдет в симуляторе сама по себе после определенного периода времени. Этого не произойдет, если вы подключите настоящий iPhone и развернете свое приложение на этом устройстве. Насколько я понял, приложение будет работать в другом жизненном цикле (что бы это ни значило), в котором приложение не получит времени для выполнения фоновых задач.
Тем не менее, я не могу понять, как и когда именно я могу наблюдать за поведением своих приложений на реальном устройстве, если iOS не планирует фоновое время выполнения для моего приложения. Могу ли я быть уверен, что если он работает на симуляторе, он также работает на реальном устройстве?
Было бы здорово, если бы кто-то с лучшим пониманием мог помочь с этим.
Комментарии:
1. Чего мне нужно добиться, так это того, что я хочу загружать файлы на сервер в 3 часа ночи. Насколько я понимаю фоновые задачи, мне кажется, что они недостаточно надежны (по крайней мере, на iOS). Я также протестировал пакет workmanager pub.dev/packages/workmanager , который показывает аналогичное поведение. Я также протестировал пакет cron pub.dev/packages/cron , но задания cron, определенные этим пакетом, перестают выполняться через пару секунд, как только приложение переходит в фоновый режим (только на iOS). У кого-нибудь есть другая идея, как я могу добиться того, что я хочу сделать?
2. Вы когда-нибудь находили рабочее решение для запуска фоновой выборки на ios при сборке релизов? У меня такая же проблема.