为什么CBPeripheral标识符和UUID不一样



我有已知UUID的iBeacon。如果我搜索这个信标从Android设备-我可以看到确切的UUID。

但是当我从iOS设备搜索这个iBeacon时,它找不到这个UUID。我发现外设的标识符与UUID不同。

func centralManagerDidUpdateState(_ central: CBCentralManager) {
  let serviceUUID: CBUUID = CBUUID(string: "e2c56db5-dffb-48d2-b060-d0f5a71096e0")
  central.scanForPeripherals(withServices: [serviceUUID], options: nil)
}

为什么它们不同?如何搜索具有已知UUID的外设?

我怀疑你在Android上"发现"的不是iBeacon的ProximityUUID,而是一种不同类型的UUID(如Larme在他的评论中提到的GATT Service)。蓝牙有许多不同的uuid用于不同的事情。你想要的iBeacons的UUID叫做邻近UUID。

你可以尝试通过使用专用的信标扫描仪(如Locate App)来查看邻近UUID。如果你可以使用这个应用程序看到信标,并且它将其识别为iBeacon,你也应该能够在iOS上使用CoreLocation来检测它,如下所示:

let region = CLBeaconRegion(proximityUUID: UUID(uuidString: "11111111-2222-3333-4444-c0765a17c9ab")!, identifier: "myBeacons")
locationManager.delegate = this
locationManager.startRangingBeacons(in: region)

你不能使用CoreBluetooth api来检测iBeacons,因为iOS阻止使用CoreBluetooth来检测iBeacons。还要注意的是,在iOS上设置信标范围还有一些步骤(请求权限,定义回调方法),所以可以查看下面的教程。

最新更新