Web Bluetooth API 技术解析:浏览器如何与蓝牙设备交互
2025-07-07 02:36:26作者:傅爽业Veleda
概述
Web Bluetooth API 是现代浏览器提供的一组 JavaScript 接口,允许网页应用与附近的蓝牙低功耗(BLE)设备进行交互。这项技术为开发者打开了物联网(IoT)和智能设备连接的新可能,无需依赖原生应用即可实现设备控制。
核心接口解析
Bluetooth 主接口
作为整个 API 的入口点,Bluetooth
接口通过 navigator.bluetooth
访问,提供以下关键能力:
- 检测浏览器蓝牙支持情况
- 请求设备访问权限
- 管理已配对设备列表
设备表示层
BluetoothDevice
对象代表一个物理蓝牙设备,包含:
- 设备标识信息(名称、ID等)
- GATT服务器连接状态
- 连接/断开连接方法
GATT架构组件
蓝牙设备的功能通过GATT(通用属性)架构暴露:
BluetoothRemoteGATTServer
:设备上的GATT服务入口点BluetoothRemoteGATTService
:特定服务(如电池服务)BluetoothRemoteGATTCharacteristic
:服务特征值(如电池电量百分比)BluetoothRemoteGATTDescriptor
:特征的元数据描述
安全机制详解
Web Bluetooth API 设计考虑了多重安全防护:
- 安全上下文要求:仅限HTTPS或localhost环境使用
- 权限策略控制:通过HTTP头控制iframe中的访问权限
- 显式用户授权:首次连接设备需用户明确授权
- 瞬时激活:必须由用户交互触发设备请求
权限状态可通过Permissions API查询:
const btPermission = await navigator.permissions.query({ name: "bluetooth" });
console.log(btPermission.state); // "granted", "denied" 或 "prompt"
典型开发流程
- 设备发现:使用
requestDevice()
过滤并选择目标设备
const device = await navigator.bluetooth.requestDevice({
filters: [{ services: ['battery_service'] }]
});
- 建立连接:连接到设备的GATT服务器
const server = await device.gatt.connect();
- 获取服务:访问特定服务
const service = await server.getPrimaryService('battery_service');
- 读取特征:获取服务特征值
const characteristic = await service.getCharacteristic('battery_level');
const value = await characteristic.readValue();
- 数据处理:解析接收到的数据
const batteryLevel = value.getUint8(0);
console.log(`电池电量: ${batteryLevel}%`);
实际应用场景
- 健康监测:连接心率带、血糖仪等医疗设备
- 智能家居:控制灯光、温控器等IoT设备
- 工业应用:与传感器和控制器交互
- 教育项目:STEM教学中的硬件交互
兼容性与注意事项
- 目前仍处于实验性阶段
- 各浏览器实现程度不一
- 部分高级蓝牙功能可能受限
- 用户教育很重要(需引导完成配对流程)
随着物联网的普及,Web Bluetooth API 为Web开发者提供了直接与物理世界交互的新途径,大大扩展了Web应用的可能性边界。