iOS CoreBluetooth GATT over BR/EDR下connectionEventDidOccur无回调问题咨询
配件侧需检查的配置项及对应解决方案
- SDP记录格式校验
iOS对BR/EDR设备发布的GATT服务SDP记录有严格校验规则,必须满足:- 服务类ID列表同时包含通用GATT服务UUID
0x1801和你自定义的服务UUID - ProtocolDescriptorList字段必须依次包含L2CAP协议描述(PSM固定为
0x001f,是GATT over BR/EDR的固定PSM)、ATT协议描述
缺少任意项iOS都会直接忽略该SDP记录,不会触发应用回调。
- 服务类ID列表同时包含通用GATT服务UUID
- 设备类(CoD)字段配置
需保证设备的CoD字段未被标记为纯BLE设备,自定义外设建议在CoD的服务类字段中标记支持通用服务类(如信息服务、音频服务),避免iOS系统层面过滤非MFi认证配件的GATT over BR/EDR服务。 - 配对权限匹配
若你的GATT服务配置了加密/认证访问权限,设备配对必须使用带MITM保护的绑定模式,不能使用Just Works无认证配对,否则iOS发现服务后会因权限不足,不向应用推送连接事件。 - UUID注册格式校验
自定义服务必须向registerForConnectionEvents接口传入完整128位UUID,不能传入16位缩略UUID,除非该UUID是蓝牙SIG认证的标准服务UUID。
应用侧额外注意项
调用registerForConnectionEvents时需明确指定传输方式参数:
[centralManager registerForConnectionEventsWithOptions:@{ CBConnectPeripheralOptionTransportKey : CBTransportBridged } matching:services];
CBTransportBridged参数强制系统匹配BR/EDR链路的服务,若不指定该参数,由于你的配件同时支持BLE GATT,iOS会默认优先匹配BLE链路的服务,不会触发BR/EDR对应的连接回调。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

