Получить рекламные данные для BLE в iOS
Я создаю приложение, которое получает UUID всех устройств BLE в радиусе действия. Я отлично работал в Android, где он дает мне рекламные данные в виде байтового массива. Теперь я пытаюсь сделать то же самое в iOS.
Я запускаю проверку и обнаруживаю устройство, а в обратном вызове есть NSDictionary, называемый advertData. Но единственная информация в нем такова:
kCBAdvDataChannel = 39;
kCBAdvDataIsConnectable = 1;
kCBAdvDataLocalName = jaalee;
kCBAdvDataTxPowerLevel = 0;
Я прав, думая, что я должен получить весь рекламный пакет? Если нет, как я могу его получить?
Ответы
Ответ 1
К сожалению, iOS не позволяет вам получить доступ к необработанным рекламным данным. Я написал сообщение в блоге, демонстрирующее это. Хотя этот пост специально посвящен iBeacons, он относится к любой рекламе BLE.
РЕДАКТИРОВАТЬ: Чтобы уточнить, вы можете прочитать необработанные байты данных производителя или сервисные байты рекламных объявлений, отличных от iBeacon. Только рекламные объявления iBeacon скрывают байты данных производителя CoreLocation
. Смотрите здесь: Получение данных отклика Bluetooth LE на iOS
Эквивалентные методы MacOS CoreLocation позволяют это сделать, поэтому это, вероятно, преднамеренное ограничение безопасности или энергосбережения в iOS.
Ответ 2
Основываясь на официальной документации от Apple iOS и моем личном опыте:
ДА, iOS не позволяет вам получать доступ к рекламным данным RAW.
НО
Если вы намерены размещать информацию в рекламном пакете и читать их из приложения iOS без подключения к периферии, это можно сделать.
Ниже описано, как:
1) в периферийной прошивке вам необходимо вставить данные вашего производителя в рекламный пакет с типом данных GAP_ADTYPE_MANUFACTURER_SPECIFIC (0xFF)
Помните, что в Специфических данных производителя первые два октета содержат код идентификатора компании, за которым следуют дополнительные данные, относящиеся к конкретному производителю.
2) в iOS
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
Вы можете просмотреть данные, указанные изготовителем, в словаре рекламы. с ключом:
CBAdvertisementDataManufacturerDataKey
3), если вы хотите, чтобы в вашем приложении получало уведомление о обратном вызове каждый рекламный пакет, отправленный периферийным устройством в iOS, не забудьте изменить параметр проверки на ДА. Посмотрите на этот пост: Core Bluetooth - постоянные обновления RSSI на внутренних устройствах
В моем сообщении в блоге скоро появится учебник: http://www.megabri.com/