範囲内のすべてのBLEデバイスのUUIDを取得するアプリを作成しています。私はそれをAndroidでうまく機能させており、広告データをバイト配列として提供しています。今私はiOSで同じことをしようとしています。
私はスキャンを実行していて、デバイスを検出しています。コールバックには、advertisingDataというNSDictionaryがあります。ただし、その中の唯一の情報は次のとおりです。
kCBAdvDataChannel = 39;
kCBAdvDataIsConnectable = 1;
kCBAdvDataLocalName = jaalee;
kCBAdvDataTxPowerLevel = 0;
広告パケット全体を取得する必要があると思いますか?そうでない場合、どうすれば入手できますか?
残念ながら、iOSでは生の広告データにアクセスできません。私は ブログ投稿 を書いて、これを実証しました。 投稿は具体的にはiBeaconsに関するものですが、それはすべてのBLE広告に適用されます。
EDIT:明確にするために、非iBeaconアドバタイズの製造元の生データバイトまたはサービスデータバイトを読み取ることができます。 CoreLocation
によって製造元のデータバイトが隠されているのは、iBeacon広告のみです。こちらをご覧ください: iOSでBluetooth LEスキャン応答データを取得
同等のMacOS CoreLocationメソッドはこれを可能にするため、おそらくiOSでの意図的なセキュリティまたは省電力の制限です。
Apple iOSからの公式ドキュメントと私の個人的な経験に基づく:
はい、iOSではRAW広告データにアクセスできません。
[〜#〜]しかし[〜#〜]
情報を広告パケットに入れて、周辺機器に接続せずにiOSアプリから読み取ることが目的である場合、これは可能です。以下にその方法を説明します。
1)周辺機器ファームウェアで、メーカー固有のデータを広告パケットに挿入する必要があります。データタイプはGAP_ADTYPE_MANUFACTURER_SPECIFIC(0xFF)メーカー固有のデータでは、最初の2オクテットに会社識別コードとそれに続く追加のメーカー固有のデータ
2)iOSの場合
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
次のキーを使用して、advertisingDataディクショナリでメーカー固有のデータを確認できます。
CBAdvertisementDataManufacturerDataKey
3)アプリでペリフェラルからiOSに送信されるすべての広告パケットがコールバック通知を受信するようにしたい場合は、スキャンオプションを必ずYESに変更してください。それについてこの投稿を見てください: コアBluetooth-範囲内のデバイスのRSSIの更新が一定
私のブログ投稿ではすぐにチュートリアルになります: http://www.megabri.com/