我在发现服务时遇到了一些问题。
它似乎可以毫无问题地连接到 Android,但在 iOS 上连接失败。从运行测试连接来看,似乎没有发现服务。在示例或文档中,我没有看到有关连接上此问题服务发现的任何信息。这是因为 gatt 服务的开发人员给我一个新服务的更新,所以我必须将 ipad 置于飞行模式,是否有针对此问题的编程解决方案?
有没有人有什么建议?
我在发现服务时遇到了一些问题。
它似乎可以毫无问题地连接到 Android,但在 iOS 上连接失败。从运行测试连接来看,似乎没有发现服务。在示例或文档中,我没有看到有关连接上此问题服务发现的任何信息。这是因为 gatt 服务的开发人员给我一个新服务的更新,所以我必须将 ipad 置于飞行模式,是否有针对此问题的编程解决方案?
有没有人有什么建议?
听起来您在发现新添加的 BLE 服务时遇到了问题。这很可能是由 iOS 缓存您的设备信息引起的。为此,您应该使用服务更改特征。
根据蓝牙核心规范,版本 5.2,卷。3, Part G, 7 DEFINED GENERIC ATTRIBUTE PROFILE SERVICE 服务改变的特征是
如果可以添加、更改或删除服务器上的服务定义,则为强制性;否则可选
Apple的配件设计指南还指出:
仅当配件在其生命周期内能够更改其服务时,配件才应实现服务更改特性。设备可以使用服务更改特性来确定它是否可以依赖先前从设备读取(缓存)的信息。请参阅蓝牙 4.0 规范,第 3 卷,G 部分,第 7.1 节。
很多天后,我找到了解决方案,您应该像这样发现您的外围设备,
print("peripheral peripheral.name \(advertisementData)")
guard let nameAdvertisementData = advertisementData["kCBAdvDataLocalName"] as? String else {
return
}