BLE 기기의 기기 이름을 변경해도 iOS에서 보이는 기기 이름이 변경되지 않음

3616 단어 iOSBLE
BLE 기기를 개발하는 중에 테스트용 앱을 만들고 있을 때 걸렸던 메모.

BLE 기기의 디바이스명을 변경했는데, 변경전의 이름이 되어 있다



확실히 변경했을 것이라고 생각해, 자신의 iOS 앱을 의심한다.
그래서, 가지고 있던 BLExplr 로 스캔해 보았더니, 보이고 있던 정보가 엇갈리고 있는 것을 깨닫는다.

※이하 캡쳐 화상의 표시는 일부 마스크 하고 있습니다


iOS, 기기 정보 캐시



저것 이것 조사한 바, 데이터를 취하는 방법에 따라서는 iOS가 가지고 있는 캐시의 디바이스명을 꺼내 버리는 모양.
(BLE의 UUID와 끈을 붙이고 있는 것 같다?)

당초의 코드에서는 didDiscoverPeripheral에 건너온 CBPeripheral의 name을 참조했다.
- (void)   centralManager:(CBCentralManager *)central
    didDiscoverPeripheral:(CBPeripheral *)peripheral
        advertisementData:(NSDictionary *)advertisementData
                     RSSI:(NSNumber *)RSSI
{
    // キャッシュからデバイス名を取り出す場合がある
    NSLog(@"Device name: %@", peripheral.name);

}

한 번 다시 연결 등으로 캐시를 다시 쓸 수도 있지만, 이대로는 BLE 기기의 디버깅이 번거롭기 때문에 다른 수단으로하고 싶은 곳.

대책



peripheral이 아니라 advertisementData의 kCBAdvDataLocalName에 들어있는 이름을 꺼내 사용한다.

이런 느낌.
- (void)   centralManager:(CBCentralManager *)central
    didDiscoverPeripheral:(CBPeripheral *)peripheral
        advertisementData:(NSDictionary *)advertisementData
                     RSSI:(NSNumber *)RSSI
{
    // キャッシュじゃないところからデバイス名を取り出し
    NSLog(@"Device name: %@", advertisementData[@"kCBAdvDataLocalName"]);
}

생각한 것 등


  • 아무것도의 기기를 사용해 개발한다면 전자의 방법에서도 별로 문제없을 것 같다
  • 디바이스명 무렵 변하지 않을 것이다.

  • peripheral로부터 캐시 측의 이름을 꺼내는 경우의 이점은 무엇일까?
  • 좋은 웹페이지 즐겨찾기