Можно ли использовать CoreBluetooth вместо iBeacons для измерения расстояния в фоновом режиме? - PullRequest
1 голос
/ 05 апреля 2019

Я работаю над проектом, в котором стационарный iPad будет выступать в качестве периферийного устройства BLE, а iPhone - центральным устройством BLE.Когда iPhone входит в в пределах нескольких метров от iPad, iPhone будет что-то делать .IPhone должен работать в фоновом режиме или заблокирован.

Я работал с библиотекой CoreLocation для создания iBeacon.Используя методы ранжирования, CoreLocation позволяет мне находить точность и близость маяка.Однако из того, что я обнаружил, CoreLocation не допускает масштабирование фона.Я также обнаружил, что мониторинг для области маяка может вызвать вход / выход событий, что позволяет мне временно запустить приложение (~ 5 секунд), чтобы затем определить дальность для точности и близости.Однако это решение не будет работать , поскольку диапазон маяка iPad очень большой , и центральное устройство будет инициировать события входа / выхода задолго до того, как устройство достигнет моего целевого диапазона (несколькометров периферийных устройств).

Таким образом, я искал библиотеку CoreBluetooth в качестве альтернативы CoreLocation / iBeacons .Я знаю, что с помощью CoreBluetooth мне придется вручную рассчитывать расстояние на основе RSSI.

Мой первый вопрос: Are my assumptions correct? Would CoreBluetooth be a good alternative to use for this project?

MyВторой вопрос: Can the iPhone (central) determine the distance between itself and the iPad (peripheral) while locked or running in the background?

Заранее спасибо!

1 Ответ

1 голос
/ 05 апреля 2019

CoreBluteooth, как правило, является плохой заменой CoreLocation для обнаружения маяков по ряду причин:

  1. Вы не можете обнаружить передачи iBeacon вообще с Core Bluetooth.Apple явно запрещает вам делать это, исключая рекламные данные в API-интерфейсах CoreBluetooth, если рекламные данные соответствуют iBeacon.

  2. Возможность обнаружения других форматов маяков с CoreBluetooth в фоновом режиме плохая.Рекламные объявления производителя (например, AltBeacon) практически полностью блокируются в фоновом режиме (вы можете обнаружить только один пакет!).Объявления служб (например, Eddystone) обнаруживаются в фоновом режиме, но обратные вызовы очень медленны по сравнению с тем, что вы получаете с CoreLocation.

  3. Многие другие функции CoreLocation отсутствуют, например, автоматический запуск приложения приобнаружение маяков и аппаратные фильтры для быстрого обнаружения фона, когда ваше приложение приостановлено.

На самом деле маяки можно задавать в фоновом режиме с помощью CoreLocation несколькими различными способами:

  1. В течение 10 секунд после каждого перехода на вход / выход из региона, как вы видели.
  2. На срок до 180 секунд после каждого перехода на вход / выход из региона, если вы запрашиваете дополнительное фоновое время выполнения.
  3. На неопределенный срок, если вы установили в Info.plist режим фонового расположения и регистрировались для периодических обновлений местоположения (например, обновления журнала / местоположения)

Опции 2 и 3 выше доступны с CoreLocation, но не CoreBluetooth,Чтобы войти в AppStore с опцией 3, вы должны убедить рецензентов Apple, что ваше приложение предоставляет законную функцию отслеживания местоположения в фоновом режиме.

Наконец, вы можете самостоятельно рассчитать расстояние на основе свойства CLBeacon # rssi.Лучше усреднить его в течение 20-30 секунд, чтобы уменьшить шум, и вам каким-то образом понадобится ваше собственное эталонное значение для ожидаемого RSSI на расстоянии 1 метра, поскольку тот, который встроен в кадр маяка, не читается сторонним программным обеспечением.,Но вам может не понадобиться это делать.Если вы просто нацеливаетесь на iPad с помощью своего приложения, вы можете просто отрегулировать калибровочную константу внутри маяка с ожидаемым расстоянием RSSI в 1 м для вашего iPad, и вы должны получить более точные измерения расстояния.

В некоторых случаяхгде вы все еще хотите использовать CoreBluetooth, несмотря на недостатки выше.По этой причине я построил репо .

...