Pobierz dane reklamowe dla BLE w iOS

Tworzę aplikację, która pobiera UUID wszystkich urządzeń BLE w zasięgu. Mam go działa dobrze w Androidzie, gdzie daje mi dane reklamy jako tablicę bajtów. Teraz próbuję zrobić to samo w iOS.

Uruchamiam skanowanie i wykrywa urządzenie, a w wywołaniu zwrotnym jest NSDictionary o nazwie advertisementData. Ale jedyne informacje w nim są następujące:

kCBAdvDataChannel = 39;
kCBAdvDataIsConnectable = 1;
kCBAdvDataLocalName = jaalee;
kCBAdvDataTxPowerLevel = 0;

Czy mam rację myśląc, że powinienem dostać cały pakiet reklamowy? Jeśli nie, jak mogę go zdobyć?

Author: user2564511, 2014-04-03

2 answers

Niestety iOS nie pozwala na dostęp do surowych danych reklamowych. Napisałem blog post demonstrując to. chociaż post jest konkretnie o iBeacons, odnosi się do każdej reklamy BLE.

EDIT: aby wyjaśnić, możesz odczytać surowe bajty reklam innych niż iBeacon. Tylko reklamy iBeacon mają swoje bajty ukryte przez CoreLocation. Zobacz tutaj: uzyskiwanie danych odpowiedzi skanowania Bluetooth LE za pomocą iOS

The równoważne metody Corelokacji OSX pozwalają na to, więc prawdopodobnie jest to celowe ograniczenie bezpieczeństwa lub oszczędzania energii w systemie iOS.

 17
Author: davidgyoung,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:34

Na podstawie oficjalnej dokumentacji z Apple iOS i mojego osobistego doświadczenia:

Tak, iOS nie pozwala na dostęp do surowych danych reklamowych.

Ale

Jeśli twoim zamiarem jest umieszczenie informacji w pakiecie reklamowym i odczytanie ich z aplikacji iOS bez połączenia z peryferiami, jest to możliwe. Tutaj jest opisane jak:

1) w peryferyjnym firmware musisz wstawić dane producenta w pakiet reklamowy z typem danych GAP_ADTYPE_MANUFACTURER_SPECIFIC (0xFF ) Należy pamiętać, że w dane specyficzne dla Producenta pierwsze 2 oktety zawierają kod identyfikacyjny firmy, a następnie dodatkowe dane specyficzne dla producenta

2) w iOS

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

Możesz zobaczyć dane producenta w advertementdata dictionary z kluczem:

CBAdvertisementDataManufacturerDataKey

3) Jeśli chcesz, aby w aplikacji otrzymywać powiadomienia zwrotne co pakiet reklamowy wysyłany przez urządzenie peryferyjne do iOS, pamiętaj, aby zmienić opcję skanowania na tak. Zobacz ten post o tym: Core Bluetooth - stałe aktualizacje RSSI urządzeń w zasięgu

W moim poście na blogu będzie wkrótce tutorial: http://www.megabri.com/

 14
Author: megabri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:05