web-dev-qa-db-fra.com

Obtenez les données de publicité pour BLE dans iOS

Je crée une application qui obtient l'UUID de tous les appareils BLE à portée. Je l'ai bien fonctionné dans Android, où il me donne les données de publicité sous forme de tableau d'octets. Maintenant, j'essaie de faire la même chose sur iOS.

J'exécute une analyse et il détecte l'appareil, et dans le rappel, il y a un NSDictionary appelé advertisementData. Mais les seules informations qu'il contient sont les suivantes:

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

Ai-je raison de penser que je devrais obtenir l'intégralité du paquet publicitaire? Sinon, comment puis-je l'obtenir?

16
user2564511

Malheureusement, iOS ne vous permet pas d'accéder aux données brutes des publicités. J'ai écrit un article de blog démontrant cela. Bien que la publication concerne spécifiquement les iBeacons, elle s'applique à toute publicité BLE.

EDIT: Pour clarifier, vous pouvez lire les octets de données brutes du fabricant ou les octets de données de service des publicités non iBeacon. Seules les publicités iBeacon ont leurs octets de données de fabricant masqués par CoreLocation. Voir ici: Obtention des données de réponse de scan Bluetooth LE avec iOS

Les méthodes MacOS CoreLocation équivalentes le permettent, il s'agit donc probablement d'une restriction intentionnelle de sécurité ou d'économie d'énergie sur iOS.

18
davidgyoung

Basé sur la documentation officielle de Apple iOS et mon expérience personnelle:

OUI, iOS ne vous permet pas d'accéder aux données de publicité RAW.

[~ # ~] mais [~ # ~]

Si votre intention est de mettre des informations dans un paquet publicitaire et de les lire à partir de l'application iOS sans vous connecter au périphérique, cela est possible. Voici comment:

1) dans le périphérique firmware vous devez insérer vos données spécifiques au fabricant dans le paquet publicitaire, avec le type de données GAP_ADTYPE_MANUFACTURER_SPECIFIC ( 0xFF ) N'oubliez pas que dans les données spécifiques au fabricant , les 2 premiers octets contiennent le code d'identification de la société suivi du données supplémentaires spécifiques au fabricant

2) dans l'iOS

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

Vous pouvez voir les données spécifiques au fabricant dans le dictionnaire AdvertisementData avec la clé:

CBAdvertisementDataManufacturerDataKey

3) si vous souhaitez que votre application reçoive une notification de rappel pour chaque paquet publicitaire envoyé par un périphérique vers iOS, n'oubliez pas de changer l'option de numérisation sur OUI. Regardez cet article à ce sujet: Core Bluetooth - mises à jour RSSI constantes des appareils à portée

Dans mon article de blog sera bientôt un tutoriel: http://www.megabri.com/

16
megabri