BLE セントラルとして動作する iOS アプリケーションを開発しています。
スキャン応答情報について質問があります。
私のアプリケーションはフォアグラウンドで動作し、scanForPeripheralsWithService:options() を 3 秒ごとに繰り返し実行しています。
[_centralMgr scanForPeripheralsWithServices:nil
options:nil];
ほとんどの場合、didDiscoverPeripheral() が呼び出されると、アプリケーションは@"kCBAdvDataLocalName" キーを使用して周辺機器のlocalNameを取得できます。
(周辺機器は他社開発)
以下は、 localNameを使用した didDiscoverPeripheral() の NSLog 出力です。
[MyApp] <Warning>: (-[MyBleCentralMgr centralManager:didDiscoverPeripheral:advertisementData:RSSI:])
[name:DeviceName], [state:0], [identifier:240FF7D3-45D5-C4EE-2E96-BED578225C56]
[MyApp] <Warning>: (-[MyBleCentralMgr centralManager:didDiscoverPeripheral:advertisementData:RSSI:]) RSSI=-63, advertisementData={
kCBAdvDataChannel = 39;
kCBAdvDataIsConnectable = 1;
kCBAdvDataLocalName = "DeviceName";
kCBAdvDataManufacturerData = <[manufactorer data of peripheral device]>;
}
ただし、(まれに) スキャン応答にlocalNameがない場合があります。
(ただし、[peripheral.name] には別の名前があります)
以下は、 localNameなしの didDiscoverPeripheral() からの NSLogです。
[MyApp] <Warning>: (-[MyBleCentralMgr centralManager:didDiscoverPeripheral:advertisementData:RSSI:])
[name:DeviceName], [state:0], [identifier:240FF7D3-45D5-C4EE-2E96-BED578225C56]
[MyApp] <Warning>: (-[MyBleCentralMgr centralManager:didDiscoverPeripheral:advertisementData:RSSI:]) RSSI=-63, advertisementData={
kCBAdvDataChannel = 39;
kCBAdvDataIsConnectable = 1;
kCBAdvDataManufacturerData = <[manufactorer data of peripheral device]>;
}
周辺機器のエンジニアは「スキャンレスポンス には常にlocalNameを入れています」と言っています。
誰かが私の質問について情報を持っている場合は、お知らせください。
- この現象はありえますか?(スキャン応答からlocalNameが消える)
- ローカル名のadvertisedataとperipheral.nameの違いは何ですか