iOS Увеличение фонового времени для мониторинга маяка - PullRequest
1 голос
/ 17 января 2020

Я разрабатываю приложение iOS swift для путешествий, концепция приложения заключается в том, чтобы после проверки поездки с пользователем, в то время как в поездке, приложение продолжает варьироваться для маяков Bluetooth, я использую эту библиотеку, чтобы сделать this https://github.com/AltBeacon/ios-beacon-tools

Как я увидел, эта библиотека использует CoreBluetooth и прекрасно работает в фоновом режиме. Проблема состоит в том, что, поскольку поездка может длиться от 1 до 2 часов, мне нужно сканировать маяки (например, каждые 15 секунд) в течение этого периода, чтобы зарегистрировать маршрут, по которому прошел пользователь.

Прямо сейчас, когда я вхожу в фоновом режиме с моим приложением, у меня есть только 30 секунд для определения диапазона маяка, а затем iOS убивает мое приложение (возможно, потому что у меня нет обработчика истечения срока действия, это то, что я читал на форумах), но все же Мне нужно, чтобы маяк продолжал работать в течение неопределенного периода времени, который может длиться от 10 минут до 2 часов.

Как мне этого добиться? Я не настолько опытен в iOS, поэтому, пожалуйста, помогите мне.

1 Ответ

1 голос
/ 17 января 2020

То, что вы хотите сделать, возможно. . Но это сложно.

Несколько моментов:

  1. В фоновом режиме вы никогда не сможете обнаружить рекламу AltBeacon или других производителей с CoreBluetooth как iOS блокирует рекламу производителя в фоновом режиме. (При использовании CoreLocation рекламные объявления iBeacon следуют различным правилам в фоновом режиме.)

  2. В фоновом режиме можно обнаруживать рекламные объявления, такие как Eddystone.

  3. Как правило, ваше приложение может работать только в течение нескольких секунд после отправки в фоновый режим, тогда обнаружения будут остановлены. Однако вы можете продлить это время до 180 секунд по запросу, используя методику, описанную здесь . Хотя в моем блоге рассказывается о CoreLocation, такая же техника работает и для CoreBluetooth.

  4. Как упоминалось в предыдущей статье, также можно продлить 180 секунд до бесконечности, выполнив следующие действия:

    • Настройте BackgroundModes в вашем Info.plist для включения местоположения.
    • Получите разрешение на местоположение в дополнение к разрешению Bluetooth.
    • Используйте CoreLocation для запуска основных обновлений местоположения. (Вам не нужно использовать результаты определения местоположения, полученные из этого, но это необходимо для поддержания приложения в фоновом режиме.)
    • Запустите фоновую задачу, как описано в сообщении в блоге, указанном выше.

Это будет держать ваше приложение, сканирующее маяки службы Bluetooth, такие как Eddyatone, в фоновом режиме, но есть три улова:

  1. Если вы хотите получить Ваше приложение одобрено для App Store. Вы должны убедить рецензентов Apple, что ваше приложение предоставляет пользователю преимущество, определяемое местоположением c, которое очевидно для пользователя.
  2. iOS каждый раз будет показывать вашим пользователям страшный диалог Приблизительно 3 дня, предупреждая их, приложение использует ваше местоположение в фоновом режиме и показывает карту со всеми местами, где пользователь находился во время работы приложения. Диалог позволит пользователю отключить разрешение на размещение в фоновом режиме, и если пользователь сделает это, обновления фонового маяка будут остановлены. См. Мой блог здесь для получения дополнительной информации.
  3. Во время постоянного сканирования Bluetooth в приложении произойдет значительный разряд батареи.
...