CoreBluteooth, как правило, является плохой заменой CoreLocation для обнаружения маяков по ряду причин:
Вы не можете обнаружить передачи iBeacon вообще с Core Bluetooth.Apple явно запрещает вам делать это, исключая рекламные данные в API-интерфейсах CoreBluetooth, если рекламные данные соответствуют iBeacon.
Возможность обнаружения других форматов маяков с CoreBluetooth в фоновом режиме плохая.Рекламные объявления производителя (например, AltBeacon) практически полностью блокируются в фоновом режиме (вы можете обнаружить только один пакет!).Объявления служб (например, Eddystone) обнаруживаются в фоновом режиме, но обратные вызовы очень медленны по сравнению с тем, что вы получаете с CoreLocation.
Многие другие функции CoreLocation отсутствуют, например, автоматический запуск приложения приобнаружение маяков и аппаратные фильтры для быстрого обнаружения фона, когда ваше приложение приостановлено.
На самом деле маяки можно задавать в фоновом режиме с помощью CoreLocation несколькими различными способами:
- В течение 10 секунд после каждого перехода на вход / выход из региона, как вы видели.
- На срок до 180 секунд после каждого перехода на вход / выход из региона, если вы запрашиваете дополнительное фоновое время выполнения.
- На неопределенный срок, если вы установили в Info.plist режим фонового расположения и регистрировались для периодических обновлений местоположения (например, обновления журнала / местоположения)
Опции 2 и 3 выше доступны с CoreLocation, но не CoreBluetooth,Чтобы войти в AppStore с опцией 3, вы должны убедить рецензентов Apple, что ваше приложение предоставляет законную функцию отслеживания местоположения в фоновом режиме.
Наконец, вы можете самостоятельно рассчитать расстояние на основе свойства CLBeacon # rssi.Лучше усреднить его в течение 20-30 секунд, чтобы уменьшить шум, и вам каким-то образом понадобится ваше собственное эталонное значение для ожидаемого RSSI на расстоянии 1 метра, поскольку тот, который встроен в кадр маяка, не читается сторонним программным обеспечением.,Но вам может не понадобиться это делать.Если вы просто нацеливаетесь на iPad с помощью своего приложения, вы можете просто отрегулировать калибровочную константу внутри маяка с ожидаемым расстоянием RSSI в 1 м для вашего iPad, и вы должны получить более точные измерения расстояния.
В некоторых случаяхгде вы все еще хотите использовать CoreBluetooth, несмотря на недостатки выше.По этой причине я построил репо .