收藏
评论

收下这份指南,小程序蓝牙应用不再难官方

在移动互联网全民化发展的当下,蓝牙技术凭借着简便、安全、低成本的优势逐渐成为无线技术领域的中流砥柱。在共享单车领域,电子设备和单车锁通过蓝牙技术形成可靠且安全的连接,从而提升用户体验。

微信团队一直致力于 小程序蓝牙能力 的应用开发,提升小程序在无线技术领域的高效、安全、可靠应用。通过 滴滴青桔小程序 等项目落地验证,小程序蓝牙能力的合理应用能够实现搜索成功率、连接成功率、开锁成功率的全面提升


当前主流的蓝牙技术主要是经典蓝牙 (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 次,用于提升开锁成功率。



在小程序蓝牙技术应用过程中,总结以下应用注意点,助力开发者更好地应用蓝牙能力。


连接前

  1. 开启 notify 功能:连接前必须调用 notifyBLECharacteristicValueChange 才能接收到设备推送的信息,否则只能发送数据,无法接收数据。
  2. 注意 iOS 与 Android 的蓝牙应用区别


连接中

  1. 停止搜索以减少性能消耗:调用 onBluetoothDeviceFound 搜索设备成功,必须执行 stopBluetoothDevicesDiscovery 停止搜索,避免后台资源消耗性能。
  2. 不使用 Android 1800 / 1801服务:在获取设备服务时,部分 Android 机型增加系统自带的 00001800 和 00001801 服务,请不要使用这 2 项服务。
  3. 重装微信获取其他设备服务:部分 Android 机型通过 getBLEDeviceServices 仅得到系统自带的 00001800 和 00001801 服务,重装微信即可获取其他设备服务。


连接后

  1. 及时关闭连接及蓝牙设备:操作完成后,及时关闭连接及蓝牙设备,否则在 Android 系统下,出现设备搜索失败的情况。
  2. 成对调用创建和关闭 BLE 连接:建议成对调用 createBLEConnectioncloseBLEConnection 接口,否则在 Android 系统下,重复调用 createBLEConnection 接口,可能导致系统持有同一设备多个连接的实例,最终导致调用 closeBLEConnection 不能真正断开与设备的连接。



合理应用小程序蓝牙技术能够丰富小程序的应用场景,提升小程序性能表现,进一步优化用户体验。

如有其他小程序应用相关的问题,可在 微信开放社区小程序交流专区 发帖互动,技术专员将为大家解答及进行深度交流。

最后一次编辑于  2022-07-12
赞 22
收藏

1 个评论

  • 微信小店技术专员-binnie
    微信小店技术专员-binnie
    2022-10-09

    学到了

    2022-10-09
    赞同
    回复 2
    • 杨文月
      杨文月
      发表于移动端
      2023-01-17
      怎么确认android有没有用到1800/1801的服务呢
      2023-01-17
      1
      回复
    • 我有一只吞金兽
      我有一只吞金兽
      发表于移动端
      2024-04-19回复杨文月
      那个是蓝牙的基础服务
      2024-04-19
      回复
登录 后发表内容
课程标签