协议支持经典蓝牙和4.0 BLE 蓝牙,眼下支持 ios 和 andriod 两个系统,兴许会扩展到其它系统。

PS:在 IOS 上比較稳定。在 Andriod 尚不稳定。由于 Andriod 手机的蓝牙芯片都不同。所以有些手机的蓝牙在运行某个命令的时候耗时太久。所以就连接不上。不稳定。

IOS 手机使用的都是同一款蓝牙芯片,所以非常稳定。


一、 总体架构

                                                             

厂商server和外设,由厂商开发完毕。

微信会提供server的接口以对接厂商的server。会提供手机的接口(如本文规定的蓝牙协议)以对接厂商的外设。


二、 主要功能

1. 该协议打通了设备和厂商server之间的数据链路。也就是支持将设备上的数据发送到厂商的server上。也支持将厂商的数据发送到设备。

2. 厂商的数据对于微信来说,是黑盒,微信不正确设备数据做分析。

3. 该协议也打通了设备和微信server之间的数据链路。

4. 设备和微信server之间的数据格式由微信规定,比如登录。新消息通知等。


三、 蓝牙BLE 模拟成流

微信规定了蓝牙BLE 设备须要先模拟成流(即stream,输入输出流)。经典蓝牙的RFCOMM,就是一个流。流具有的特性有:

a. 能够传输无限长度的数据

b. 双工。读写能够并发,互不干扰。


显然,蓝牙BLE 无法传输无限长度的数据。为了实现这个目的。须要定义一个规范 ----- 那就是“帧”


    以上内容都属于烂大街的东西了,没有什么实用的详细的东西,仅仅是对微信蓝牙外设做个大致的介绍。我从去年听到这个东西,知道今年 7 月份才開始正式接触,刚開始非常难上手。代码也比較复杂,学起来比較困难。

可是总的来说这就是一个 BLE 设备和手机 APK 之间的连接和数据交换,跟我曾经做的 BLE 设备与京东 APK 对接本质是一样的。可是还有不一样的地方,那就是微信要用到的 MAC 和 MD5。微信毕竟和其它简单的 APK 有差别。有加密数据和不加密数据,如今大多都在用不加密模式,微信仅仅是做一个接口,把数据从 BLE 设备终于传到厂商server,假设使用加密模式的话,微信会对数据有个处理的过程。有些厂商是不允许的。