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

Web Bluetooth中厂商特定数据映射为空,求助排查原因

问题排查方案

针对你遇到的Web Bluetooth无法读取BLE厂商特定数据的问题,结合你描述的事件触发、过滤生效的情况,重点排查以下几个方向:

1. 测试用公司ID 0xFFFF的限制

0xFFFF是蓝牙SIG预留的测试专用公司ID,部分浏览器(包括Chrome)会对这个ID做特殊限制,禁止Web Bluetooth API读取对应的数据。建议更换为一个真实的、蓝牙SIG分配的公司ID(哪怕是临时测试用的)再尝试。

2. 广播数据的格式合规性

厂商特定数据必须严格遵循蓝牙规范的结构:

2字节大端序的公司ID + 自定义数据内容

如果你的设备广播的厂商数据没有按照这个格式封装(比如公司ID位置错误、字节序不对、缺少公司ID直接发数据),Chrome会无法解析,导致manufacturerData为空。可以用Chrome的BLE调试工具(chrome://bluetooth-internals/)确认广播包的厂商数据结构是否正确。

3. 权限与实验标志的细节

虽然你已经开启了相关标志,但需要确认以下几点:

  • 必须开启chrome://flags/#enable-web-bluetooth,且重启Chrome生效
  • 新版本Chrome(100+)建议同时开启chrome://flags/#enable-web-bluetooth-new-permissions-backend
  • 地理位置权限必须授予:Web Bluetooth的BLE扫描依赖地理位置权限,你可以点击Chrome地址栏的权限图标,确认页面已获取“位置”权限

4. Chrome版本兼容性

部分旧版本Chrome对厂商数据的解析存在bug,建议升级到最新的稳定版或Beta版Chrome后再测试。

5. 代码过滤器的正确性

确认requestLEScan的过滤器配置是否完全匹配设备广播的前缀,比如:

navigator.bluetooth.requestLEScan({
  filters: [{
    manufacturerData: [{
      companyIdentifier: 0xFFFF, // 若换ID则修改此处
      dataPrefix: new Uint8Array([0x00, 0x01]) // 与设备广播的前缀字节完全匹配
    }]
  }],
  keepRepeatedDevices: true
}).then(scan => {
  scan.addEventListener('advertisementreceived', event => {
    // 可以先打印原始广播数据排查
    console.log('原始广播数据:', event.advertisementData);
    console.log('厂商数据:', event.manufacturerData);
  });
});

注意dataPrefix的字节顺序、长度必须和设备广播的前缀完全一致,否则即使事件触发,也可能无法正确解析出厂商数据。


内容的提问来源于stack exchange,提问作者E Skal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 11:10:50