CBConnectPeripheralOptionNotifyOnConnectionKey后台重连未触发提醒问题排查
CBConnectPeripheralOptionNotifyOnConnectionKey 未触发系统通知的问题分析
核心误解:选项的生效场景
CBConnectPeripheralOptionNotifyOnConnectionKey 仅在系统托管的自动重连场景下触发系统通知,而非APP主动发起的连接操作。你的代码是在didDiscover回调中主动调用connect,属于APP主动发起的连接,即使在后台,这个选项也不会触发系统通知。
系统自动重连的触发条件
要让该选项生效,必须满足以下条件:
- 中心设备与外设曾建立过持久绑定连接:首次连接时,系统会自动记录外设信息,后续外设重新可用时,系统会主动发起重连。
- 中心APP已配置正确的后台权限:
Info.plist中添加UIBackgroundModes并勾选bluetooth-central(或手动添加字符串bluetooth-central)。- 已获取蓝牙始终允许权限:确保
NSBluetoothAlwaysUsageDescription(iOS 13+)或NSBluetoothPeripheralUsageDescription(iOS 12及以下)已配置,且用户授予了始终允许权限。
- 外设处于可被重连的状态:外设需持续广播,或与中心设备已完成配对绑定。
你的代码问题
当前代码是主动扫描到外设后发起连接,属于APP主动行为,不符合该选项的生效场景。若要触发系统通知,应依赖系统的自动重连机制,而非主动扫描连接:
- 首次连接外设后,保存外设的
identifier(UUID)。 - 当APP启动或后台唤醒时,调用
centralManager.retrievePeripherals(withIdentifiers: [savedUUID])获取已绑定的外设。 - 若能找到外设,直接调用
connect并传入CBConnectPeripheralOptionNotifyOnConnectionKey: true,此时若APP处于后台,系统发起的重连会触发通知。
测试流程修正建议
- 中心APP连接外设后,切换至后台,不要主动扫描。
- 手动断开中心设备蓝牙,再重启蓝牙。
- 此时系统会自动检测到已绑定的外设并发起重连,若APP在后台,会触发系统通知。
补充权限检查
确认Info.plist中的配置:
- 已添加
bluetooth-central到UIBackgroundModes。 - 已添加蓝牙权限描述字符串,且用户已授予始终允许权限。
内容的提问来源于stack exchange,提问作者ajc
相关产品推荐
相关产品推荐

