You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CBCentralManagerScanOptionAllowDuplicatesKey设为false仅发现1台同服务BLE设备问题咨询

BLE扫描重复过滤问题解答

1. 第二台设备未被发现的原因

你遇到的情况和CBCentralManagerScanOptionAllowDuplicatesKey的去重规则没有直接关系,大概率是以下三种原因导致:

  • 两台BLE外设的全部广播数据(服务UUID、本地名、厂商自定义字段等)完全一致,部分iOS版本存在识别bug,会误将广播数据完全相同的不同外设判定为同一设备,分配相同的CBPeripheral.identifier,因此只会触发一次发现回调
  • 其中一台设备的广播包未携带你传入scanForPeripherals方法的服务UUID,被系统扫描规则直接过滤
  • 两台设备的广播参数设置不合理,出现信道占用冲突,同一扫描周期内只有一台的广播包被中心设备捕获,可尝试延长扫描时间、调大广播间隔验证

2. CBCentralManagerScanOptionAllowDuplicatesKey的去重依据

该参数为false时,系统仅会在首次发现某台外设时触发didDiscover回调,后续同一外设的重复广播不会再触发回调。
此处判定「同一外设」的核心依据是iOS系统为外设生成的唯一标识符CBPeripheral.identifier,该标识符由系统基于外设的原始MAC地址、广播特征等信息生成,同一台外设同一台iOS设备上的标识符稳定唯一,完全不会因为两台外设拥有相同的主服务UUID就判定为重复。苹果不对外暴露外设原始MAC地址,所有外设识别逻辑都基于该系统生成的identifier。

3. 结论验证

你提出的「该参数仅基于主服务判定重复」的结论是错误的,可通过简单测试验证:给两台设备的广播包新增不同的自定义字段,或者修改其中一台的广播本地名,重新扫描即可发现两台设备都会被正常回调,不会被去重。
如果不修改广播数据仍只能扫到一台,就是前面提到的iOS对全相同广播数据外设的识别bug,仅需给不同设备的广播包加1字节的区分字段即可解决。

补充代码说明

你提供的扫描代码、代理方法实现本身没有逻辑错误,CBCentralManagerScanOptionAllowDuplicatesKey: false的设置不会主动过滤拥有相同服务的不同设备。


内容的提问来源于stack exchange,提问作者Mickael Belhassen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 18:18:05