广告数据显示 3 项服务,但只发现一项

Advertisement data shows 3 services, but there is only one discovered

我使用 CBCentralManager 连接到 BLE 外设。它与此广告数据相关联:

["kCBAdvDataLocalName": name, 
"kCBAdvDataIsConnectable": 1, 
"kCBAdvDataServiceUUIDs": <__NSArrayM 0x600000c74de0>(
Generic Access Profile,
Generic Attribute Profile,
1803
),
"kCBAdvDataChannel": 37]

所以我调用peripheral.discoverServices(nil)来获得这3个服务,但是didDiscoverServices只找到一个

 [<CBService: 0x600001768040, isPrimary = NO, UUID = 1803>]

谁能解释一下为什么会这样?

您在广告中看到的三种服务中有两种是 Generic Access Profile and the Generic Attribute Profile。这些用于管理外围设备的发现以及服务和属性的发现。

核心蓝牙在您请求外设、服务和特征发现时使用这些服务。

您无法直接与他们互动,因此当您发现可用服务时,他们不会报告给您的代表。

您的外设公开的最后一个服务是 link loss 服务 (0x1803)。此服务确实具有您的中心可以与之交互的特征,因此当您发现服务时会返回它。