在移动互联网全民化发展的当下,蓝牙技术凭借着简便、安全、低成本的优势逐渐成为无线技术领域的中流砥柱。在共享单车领域,电子设备和单车锁通过蓝牙技术形成可靠且安全的连接,从而提升用户体验。
微信团队一直致力于 小程序蓝牙能力 的应用开发,提升小程序在无线技术领域的高效、安全、可靠应用。通过 滴滴青桔小程序 等项目落地验证,小程序蓝牙能力的合理应用能够实现搜索成功率、连接成功率、开锁成功率的全面提升。
当前主流的蓝牙技术主要是经典蓝牙 (BR / EDR) 和低功耗蓝牙 (BLE),其中 BLE 凭借着与电子设备的简便互操作性,成为大部分共享单车蓝牙锁的重要技术选型。
在实际应用场景,小程序蓝牙技术与蓝牙锁之间进行以下技术交互,实现解锁。
Step 1:蓝牙扫描
扫描蓝牙广播,检查 Android 系统直连模式是否连接正常。
Step 2:生成通信帧
与锁建立 BLE 连接后,准备获取锁的 Token 通信帧,将传递信息 AES 加密并转化成 HexString 发送。
Step 3:获取锁的 Token
将传递信息 AES 解密后收到 Token 获取成功通信帧,同时截取相应位数的字节作为令牌 Token,准备开始解锁。
Step 4:等待解锁
发送解锁信息通信帧,利用 Password 还有 Token 同样将传递信息 AES 加密并转化成 HexString 以一定的规则发送,等待解锁。
Step 5:解锁成功
收到蓝牙返回的信息 AES 解密后得到解锁通信帧代表解锁成功。
通过 滴滴青桔小程序 等项目的实践探索,合理应用小程序蓝牙技术能够实现解锁全链路的优化提升——
提前搜索时机提升蓝牙搜索成功率
蓝牙技术在搜索耗时的原生限制导致单车锁-电子设备之间的搜索成功率偏低。因此在不增加用户功耗的前提下,适当提前搜索时机能够减少搜索设备的耗时,提升蓝牙搜索成功率。
默认直连模式提升蓝牙连接成功率
大部分的 Android 系统手机均支持直连模式,建议针对 Android 系统,默认使用直连模式,加速蓝牙连接流程。如果直连模式失效,则重新搜索,连接附近设备。
建立失败重试机制提升蓝牙开锁成功率
低功耗蓝牙的原生不稳定性要求开发者做好重连逻辑。建议建立失败重试机制,即在每个 API 回调失败后,允许失败重试 3 次,用于提升开锁成功率。
在小程序蓝牙技术应用过程中,总结以下应用注意点,助力开发者更好地应用蓝牙能力。
连接前
- 开启 notify 功能:连接前必须调用 notifyBLECharacteristicValueChange 才能接收到设备推送的信息,否则只能发送数据,无法接收数据。
- 注意 iOS 与 Android 的蓝牙应用区别
连接中
- 停止搜索以减少性能消耗:调用 onBluetoothDeviceFound 搜索设备成功,必须执行 stopBluetoothDevicesDiscovery 停止搜索,避免后台资源消耗性能。
- 不使用 Android 1800 / 1801服务:在获取设备服务时,部分 Android 机型增加系统自带的 00001800 和 00001801 服务,请不要使用这 2 项服务。
- 重装微信获取其他设备服务:部分 Android 机型通过 getBLEDeviceServices 仅得到系统自带的 00001800 和 00001801 服务,重装微信即可获取其他设备服务。
连接后
- 及时关闭连接及蓝牙设备:操作完成后,及时关闭连接及蓝牙设备,否则在 Android 系统下,出现设备搜索失败的情况。
- 成对调用创建和关闭 BLE 连接:建议成对调用 createBLEConnection 和 closeBLEConnection 接口,否则在 Android 系统下,重复调用 createBLEConnection 接口,可能导致系统持有同一设备多个连接的实例,最终导致调用 closeBLEConnection 不能真正断开与设备的连接。
合理应用小程序蓝牙技术能够丰富小程序的应用场景,提升小程序性能表现,进一步优化用户体验。
如有其他小程序应用相关的问题,可在 微信开放社区小程序交流专区 发帖互动,技术专员将为大家解答及进行深度交流。
学到了