mike_od
@mike_od
Embedded Software and Hardware Engineer

Как улучшить надежность сканнера BLE в бекграунде в iOS?

Всем привет!
Разрабатываем приложение, которое в фоне (бекграунд) должно определять положение телефона в помещениях, на основе BLE iBeacon. Каждые 30 секунд запускаем сканнер на 10 секунд, чтобы получить RSSI данные наших биконов (UUID статичный у всех биконов, по нему и фильтруем, Major и Minor уникальные для каждого бикона). Потом фильтруем RSSI значения и получаем самый близкий бикон к пользователю. Частота предачи сообщения биконом = 1Hz.

Никак не можем добиться надежной работы сервиса в фоне, он то перестает работать, то снова начинает.

Описание флоу:

  • собираем биконы из метода
    locationManager(_ manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], in region: CLBeaconRegion)

  • там запускаем бэкграунд таск UIApplication.shared.beginBackgroundTask
  • и сразу запускаем дефолтный таймер Timer() на 10 сек
  • после 10 секунд, делаем расчеты, находим ближайший бикон
  • отправляем родным запросом на сервер данные
  • в callback запроса закрываем бэкграунд таск


Как ведут себя в бэкграунде переменные сервиса использующейся при расчетах?
Как настроить бэкграунд на стабильную работу по таймеру? Есть ли смысл уменьшать время сканирования (10 секунд бекграунд) или\и увеличить частоту трансляции бикона(1Hz)

p.s.
настройки в plistи настройки в приложении, отвечающие за работу в бекграунде добавлены. Пользователь разрешает Всегда использовать местоположение
  • Вопрос задан
  • 69 просмотров
Пригласить эксперта
Ответы на вопрос 2
briahas
@briahas
ObjC, Swift, Python
Подозреваю, что у вас в настройках проекта прописано, что бэкграунд таски нужны для трека локации.
А система, в таком случае сама решает когда запустить ваш процесс для трека локации. Потому что она умнее.
Ответ написан
doublench21
@doublench21 Куратор тега Swift
Каждый раз одно и тоже. Запомните уже наконец:

- Cостояние, когда ваше приложение находится в выключенном состоянии, вы не можете делать абсолютно НИЧЕГО.

- Состояние, когда ваше приложение находится в свернутом состоянии, вы можете делать лишь очень малое количество действий с ещё более малым отведенным под это дело временем. Время в данном случае абсолютно неконтролируемое. Система сама решает, когда и что нужно запускать в таком состоянии.

Поэтому такого рода приложения, который пытаются что-то делать в свёрнутом состоянии в нужное ИМ время не могут и не будут существовать.

Коим я с Apple полностью согласен. Кому нужно приложение, которое по его прихоти будет делать в фоне, то, что оно хочет и главное, когда хочет. Если я его закрыл или свернул, значит оно мне не интересно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы