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