Обнаружение, может ли устройство передавать iBeacons - Core Bluetooth - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь получить информацию о типе маяков, которые может передавать мое устройство. У меня проблема с обнаружением iBeacons. Я могу определить этот тип по базовой структуре, которая будет возвращать объект CLBeacon. С другой стороны, я обнаруживаю устройства, использующие Core Bluetooth. CLBeacon и Core Bluetooth выдают основанные элементы UUID. Но есть разные UUID, и я не вижу способа отобразить эти значения.

Моя следующая идея - обнаруживать зависимость iBeacons от рекламных данных, возвращаемых функцией

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI 

. Как я уже прочитал, iBeacons блокирует производственные данные и служебные данные. Более того, нет возможности подключиться к устройствам iBeacon. Итак, мой вопрос:

Это хорошая идея, чтобы возвращение того, что устройство может передавать iBeacon, зависит от приведенной выше информации (нет изготовленных данных, нет служебных данных, устройство не подключается)?

Или, может быть, Есть другой способ обнаружить iBeacons? Как я уже писал выше, я пытаюсь использовать Core Location, но у меня нет идеи сопоставлять значения из Core Location и Core Bluetooth информации (например, через UUID)

1 Ответ

2 голосов
/ 11 февраля 2020

К сожалению, нет общих идентификаторов между устройствами, обнаруженными с помощью CoreBluetooth и CoreLocation. Apple приложила значительные усилия, чтобы сделать невозможным сопоставление информации из двух источников:

  • Apple блокирует чтение полей данных производителя в рекламных объявлениях, обнаруженных CoreBluetooth, для любой рекламы, которая соответствует формату iBeacon. , (На самом деле он очищает содержимое данных, даже если он доступен для чтения на других платформах, таких как Linux, Windows и Android стеки Bluetooth.)

  • Apple генерирует псевдо - случайный UUID для идентификатора устройства CoreBluetooth, который он внутренне сопоставляет с аппаратным адресом MA C, который известен только операционной системе. Этот идентификатор устройства Bluetooth имеет такой же формат UUID, как и у ProximityUUID, который используется с iBeacon, но эти два никогда не совпадают для одного и того же физического устройства.

Прочтите мой пост об этом здесь: http://www.davidgyoungtech.com/2013/10/21/corebluetooth-doesnt-let-you-see-ibeacons

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

...