CBPeripheralのAdvertisementDataについて

はじめに

CBPeripheralを実装する際にAdvertisementmentDataを必ず作成しますが、調べてもCBAdvertisementDataLocalNameKey以外のを使用している記事がほとんど見当たらなかったのでアドバタイズ時に指定できるデータについて調べてみました。

ble接続を行う対象の機器が完成していない場合やPheripheral部分のテストを行いたい時アドバタイズデータを適切に設定することで実現することが可能です。

アドバタイズデータ

CBAdvertisementDataLocalNameKey

デバイス名を表記するKey、iPhoneなどをPeripheralとしてadvertiseさせる際一度ble接続を行なってしまうと設定 > Bluetoothにデバイス名が登録されてしまい、Light blueでスキャンを行うとCBAdvertisementDataLocalNameKeyで登録した名前ではなくiTunesで端末に登録した名前が表示されるので注意!!

ペアリング後はCBAdvertisementDataLocalNameKeyが端末名になるので端末名自体の名前をCBAdvertisementDataLocalNameKeyで指定していたものに変更すればスキャン時にテストが可能

CBAdvertisementDataLocalNameKey

CBAdvertisementDataIsConnectable

接続可能かどうかをアドバタイズするKey、Peripheral側で接続させないタイミングなどがある際はこのKeyで設定が可能なはず?だがfalseを指定してもconnectできてしまった。

falseを設定すると以下のようなwarningが表示される。

WARNING: The advertisement key 'Is Connectable' is not allowed

またvalueにはNSNumberを設定するのでboolean, int, uint, floatでの指定が可能

CBAdvertisementDataIsConnectable

CBAdvertisementDataServiceDataKey

CBAdvertisementDataServiceDataKeyはCentral側でPheripheralがアドバタイズしたServiceUUIDを取得するKeyです。

advertisementData[CBAdvertisementDataServiceDataKey] as? [CBUUID: Data]

CBAdvertisementDataServiceDataKey

CBAdvertisementDataServiceUUIDsKey

Peripheralの保持しているServiceUUIDをadvertiseで表示することができる。

CBAdvertisementDataServiceUUIDsKeyでServiceを公開しなくても接続後Service内のcharacteristicへのアクセスや書き込みは可能

指定を行う際は以下のように配列でUUIDを渡さないとerrorになってしまうので注意が必要。

[CBAdvertisementDataServiceUUIDsKey:[CBUUID(string: "UUIDTEST-5B3B-4571-9508-CF3EFCD7BBAE")]]

CBAdvertisementDataServiceUUIDsKey

CBAdvertisementDataTxPowerLevelKey

CBAdvertisementDataTxPowerLevelKeyはペリフェラルがアドバタイズ電力を供給している場合に使用するもので、RSSI値と送信電力のレベルを使用して計算をして電波強度からおおよその距離が取得できるようです。

CBAdvertisementDataTxPowerLevelKey

CBAdvertisementDataManufacturerDataKey

ペリフェラルを設計した会社が任意に設定できるデータのようです。どんな風に使用するのかは不明

CBAdvertisementDataManufacturerDataKey

CBAdvertisementDataOverflowServiceUUIDsKey

アドバタイズ時にオーバーフローしてしまった分が記述される。アドバタイズデータは最大28バイトでServiceUUIDがその領域を超えてしまう場合CBAdvertisementDataOverflowServiceUUIDsKeyに保存されるが、正確でない場合がある。

CBAdvertisementDataOverflowServiceUUIDsKey

CBAdvertisementDataSolicitedServiceUUIDsKey

CBAdvertisementDataSolicitedServiceUUIDsKeyにはCBUUIDの配列が格納されている。Central側でスキャンを行う際に指定したUUIDのリスト

CBAdvertisementDataSolicitedServiceUUIDsKey

※追記

CBPeripheralのアドバタイズで実装可能なのはCBAdvertisementDataLocalNameKey と CBAdvertisementDataServiceUUIDsの2つのkeyのみです!!

見落としていたのですが公式ドキュメントにしっかり記載されていました。

参考文献

iOS CoreBluetooth: startAdvertising() Error advertising static data

CoreBluetoothを使ってBLE Peripheral側を実装する

CoreBluetooth で出来る事

Eddystone と iOS – その2: 実装編

Swift

前の記事

CocoaPodsでLicensePlistを使う
Swift

次の記事

CryptKitによるハッシュ化