微信蓝牙外设协议beta.doc
《微信蓝牙外设协议beta.doc》由会员分享,可在线阅读,更多相关《微信蓝牙外设协议beta.doc(45页珍藏版)》请在咨信网上搜索。
1、微信蓝牙外设协议Project BlueShadow V1.0.3Tencent Confidential文档变更日记版本变更日期01初稿2023/10/902针对常见问题,增长说明2023/10/1803针对常见问题,增长说明。修改包头结构。2023/11/504第二期初稿增长17条protobuf协议,废弃1条,修改1条2023/11/2605暂时去掉二期的内容(17条protobuf),在一期的基础上增长三条协议,并修改auth协议。加入加密解密部分说明。2023/2/1206修改uuid的规定。补充协议字段和错误码。补充加密部分细节。2023/2/2707修改加密协议,增长例子。补充不
2、加密的协议。补充错误码。2023/3/407 . 1修改proto里的UserId,Challeange字段。2023/3/707 . 2规定低功耗蓝牙广播包必须包含mac地址。InitResp增长可选字段以支持自动同步模式,修改解码失败错误码。2023/4/307 . 3修改SendData, SendDataPush两条协议,增长type字段,用来区分是发送给厂商服务器,还是发送给公众平台服务器。2023/4/240 . 7 . 4修改ble蓝牙service uuid的值。2023/4/250 . 7 . 5公众平台协议手环修改:增长BaseResponse字段。2023/4/301 .
3、 0 . 1提高版本号为1.0.1 Beta2023/6/91 . 0 . 2增长Read Characteristics,以支持ios多app连接。增长html jsapi支持。公众平台协议手环修改:增长rtc时间支持。废弃一些字段,修改协议名字为SendData,RecvData等。2023/7/151 . 0 . 3增长蓝牙扫描绑定相关规范。2023/8/18目录概要5整体架构5重要功能5蓝牙BLE模拟成流6协议71 绑定7扫码绑定8蓝牙扫描绑定82 扫描和连接93 流94 包104 包结构105 定长包头116 变长包体117 身份验证和加密128 不加密的方法149 会话约定1510
4、 时序1511 Read Characteristics1512 其他16微信的Protobuf协议161 概述162 命令列表163 错误码174 JSAPI19函数19事件21附录221 ProtoBuf协议介绍222 蓝牙硬件一些规定233 Ios BLE设备的截图234 包的二进制例子255 包的数据流图266 包的时序图277 加解密字段288 Md5DeviceTypeAndDeviceId的例子299 CBC例子3010 CRC32例子3111 微信蓝牙外设proto文献3112 微信公众平台proto文献3513 JsApi例子37概要该文档规范了蓝牙设备和手机上的微信的通信协
5、议协议支持经典蓝牙和4.0 BLE蓝牙,目前支持ios和andriod两个系统,后续会扩展到其他系统。整体架构厂商服务器和外设,由厂商开发完毕。微信会提供服务器的接口以对接厂商的服务器,会提供手机的接口(如本文规定的蓝牙协议)以对接厂商的外设。重要功能该协议打通了设备和厂商服务器之间的数据链路,也就是支持将设备上的数据发送到厂商的服务器上,也支持将厂商的数据发送到设备。厂商的数据对于微信来说,是黑盒,微信不对设备数据做分析。该协议也打通了设备和微信服务器之间的数据链路。设备和微信服务器之间的数据格式由微信规定,例如登录,新消息告知等。蓝牙BLE模拟成流微信支持蓝牙BLE。微信规定了蓝牙BLE设
6、备需要先模拟成流(即stream,输入输出流)。经典蓝牙的RFCOMM,就是一个流。流具有的特性有:a. 可以传输无限长度的数据 b. 双工,读写可以并发,互不干扰。显然,蓝牙BLE无法传输无限长度的数据,为了实现这个目的,需要定义一个规范。蓝牙设备需暴露两个特性值(Characteristics):Write特性值,Indication特性值。蓝牙设备从Write特性值接受数据,从Indication特性值发送数据。Indication特性值类型是bytes。这里我们约定,把一个特性值一次传输的数据,称为一帧(不同类型的特性值一次传输的数据长度是不同样的)。注意:应用层上的数据包(例如1k大
7、小),会分散成许多帧来传输。蓝牙设备写过程:1. 分帧:假设蓝牙手环上有1k数据,要发给手机微信。由于一个特性值长度有限(如20个字节),显然需要分多次才干传输完毕。1k数据,要提成1024字节/ 20字节=51 个帧。剩下的4个字节,局限性一帧(20个字节),需补齐为一帧并对剩下的16个字节赋0。总共是52帧。2. 发送第一个帧:把第一个帧的内容放入特性值里面。然后告知手机读取数据,告知有两种方式,Indication 和notify,这里使用Indication方式,即带响应的告知。当告知完毕的时候,可以认为手机已经读完数据。这就完毕了发送第一个帧。3. 按照2的环节,依次发送剩下的帧。蓝
8、牙设备读过程:当蓝牙设备发现读特性值收到数据的时候,就接受数据,并追加到设备的buf里。注意:蓝牙设备必须等微信app订阅了Characteristics之后,才干indicate数据,否者会导致设备发送数据丢失的问题。协议1 绑定用户绑定设备有两种方式:扫码和蓝牙扫描。这两种方式都需要先向微信公众平台注册授权设备(具体api参见公众平台文档)。扫码绑定用户通过扫描设备二维码绑定设备(获取二维码的方法见公众平台文档)。用户场景:用户打开扫一扫界面,扫码设备二维码,出现公众号页面。用户点击关注,进行绑定设备。扫码绑定并不需要设备在身边。蓝牙扫描绑定用户通过扫描周边的蓝牙设备进行绑定。用户场景(可
9、确认设备):用户先关注公众号,点击绑定设备,进入绑定说明页。同时,微信开始扫描设备。用户操作设备确认(如点击设备上的按钮,或者双击设备),设备广播特殊的包(称为确认包),微信监听到包之后,开始关注并绑定。蓝牙扫描绑定需要设备在身边。蓝牙扫描绑定的设备分为两种:可确认(如有按钮,或者可以双击)的设备。大部分设备属于可确认设备。无法确认的设备(无法确认的设备,出于安全性的考虑,可用扫码绑定)可确认的设备,当用户进行设备确认时(如双击手环,或者按按钮),需要广播特殊的包(称为确认包,具体格式见附录)。2 扫描和连接进入特定界面后,微信会开始扫描设备。低功耗蓝牙设备需要在广播包里广播:a. 微信规定的
10、service uuid(具体见附录)。b. 厂商自定义字段里,包含mac地址(具体见附录)。并且需要包含指定的Characteristics(具体见附录)。Andriod经典蓝牙设备需要暴露一个指定uuid的rfcomm服务(具体见附录)。Ios经典蓝牙需要通过mfi认证,并且SerialNumber需为mac地址(字符串形式)。扫描到设备后,微信会连接设备(Ios经典蓝牙需要用户手动在设立界面里面连接上设备)。3 流经典蓝牙使用RFCOMM通信(是个流),蓝牙BLE也模拟成流。4 包流之上运载的是一个紧接着一个的业务逻辑的数据包。数据包的发送方和接受方:设备厂商服务器,或者设备微信服务器。
11、把设备-厂商服务器/微信服务器的请求称为Req,回包称为Resp。一个请求,相应着一个回包。把厂商服务器/微信服务器-设备的请求称为PushReq,没有回包(即没有PushResp这样的包)。4 包结构由定长包头和变长包体组成。变长包体Protoalbuf打包的二进制数据定长包头struct BpFixHeadunsigned char bMagicNumber;unsigned char bVer;unsigned short nLength;unsigned short nCmdId;unsigned short nSeq;包包的二进制例子见附录。5 定长包头字段类型说明bMagicNum
12、berunsigned char填0xFEbVerunsigned char包格式版本号,填1nLengthunsigned short为包头+包体的长度nCmdIdunsigned short命令号,如ECI_req_auth,ECI_resp_sendDataToManufacturerSvr等nSequnsigned short递增。一个Req相应一个Resp,并且它们的nSeq相同,并且永不为0。Push的nSeq永远为0;6 变长包体为Protobuf(protobuf的介绍见附录)打包的结构。例如AuthReq。一个包体里面只有一个Req,或者一个Resp,或者一个PushReq。
13、每个Req/Resp/PushReq都有相应的EmCmdId,例如AuthReq的命令号为ECI_req_auth。具体的定义见附录。7 身份验证和加密为保证数据安全,所有命令都需要加密。加密算法选用aes 128位,并使用cbc模式,pkcs7填充。初始向量为密钥。具体验证和加密的环节如下:a. 设备需要烧一个Key(128位)到硬件上,微信服务器也要记录下这个Key。一个设备(deiveId+deviceType唯一拟定一个设备),相应一个Key。key要保护好(类似用户密码,银行卡账号密码),千万不要印刷出来或者打印出来。b. 对于设备来说,手机和服务器可当作一个黑盒。设备和手机服务器之
14、间,通过Auth命令,使用key,最终,把sessionKey下发给到设备。Auth的环节为:设备发送AuthReq,里面的字段有MD5(deviceType+deviceId)(假如设备算md5很麻烦的话,建议先算好,直接烧进设备里面),另一个字段为AES加密的一段buffer(具体字段细节在附录描叙)。微信发送回包AuthResp,里面的字段有用AES加密的具有sessionkey的一段buffer(具体字段细节在附录描叙)。设备解密这段buffer可得到SessionKey。c. 设备和手机之间,就通过sessionKey来加解密包。AuthReq, AuthResp之后的所有命令,例如
15、InitReq, InitResponse,SendDataToManufaturSvrReq,SendDataToManufacturerSvrResponse,ManufacturerSvrSendDataPush等都需要加解密。d. 加密只针对变长包体,不需要加密定长包头。e. 为了提高安全性,设备可再进一步的验证手机是否可信。设备在InitReq里填入Challeange(一个4字节的随机数random4),手机将在InitResp里面返回ChalleangeAnswer(一个4字节的数,值为crc32(random4))。设备验证ChalleangeAnswer是否对的。假如是,说明
16、手机是可信的。身份验证和加解密大体的流程图为:此外有一些细节:a. 当sessionKey过期,手机对设备的所有请求都返回错误码 EEC_sessionTimeout,规定设备重做一次auth。b. 当发现解密设备的包失败时,返回 EEC_decode。这种情况下,通常是sessionkey过期,或者是设备程序有问题。8 不加密的方法为了减少设备厂商的接入难度,加快产品进程,微信客户端同时支持不加密的方式。但是,这个只是在测试阶段可用,正式的设备发布出去的时候,都规定加密。环节如下:将AuthReq里的AesSign字段付空。发送AuthReq。收到AuthResp之后,忽略掉AesSessi
17、onKey字段。将InitReq里的Challeange字段随便付一个值。发送InitReq。收到InitResp,忽略掉ChalleangeAnswer字段。随后的包都不需要加解密。9 会话约定a. 设备连上微信之后,需要发送AuthReq,等收到成功的回包之后,接着还要发送InitReq,并收到成功的回包之后,才干正常发送数据。假如设备没有auth,手机对设备的所有请求都返回错误码 EEC_needAuth。b. 当出现解包异常的时候,直接断开连接。c. Push类的包seq永远为0。Req类和Resp类的包的seq永不为0。d. 服务器可随时发送Push包。e. 厂商服务器发送的Push
18、包(注意Push包是没有回包的,即没有PushResp),假如需要设备的回包,需要由厂商自己实现。具体方法如:厂商发送ManufacturerSvrSendDataPush给设备,设备收到push后,向厂商服务器发送一个SendDataToManufatureSvrReq。这时厂商服务器可知道设备收到了push,并且可以从Req里取得设备的回应数据。10 时序时序图请见附录。11 Read Characteristics设备需要再微信的service下面,暴露一个read character,内容为6字节的mac地址。当ios上的其他app连接上设备时,设备不会再广播,微信会读取该特性值,以拟
19、定是否要连接该设备。12 其他目前规定了一些基础的协议,更多的协议等待补充。微信的Protobuf协议1 概述变长包体部分,使用的是Protobuf定义的协议。Protobuf文献见附录。里面规定了设备和微信客户端之间的命令。2 命令列表名称描叙Auth登录Init初始化SendData设备发送数据给厂商或微信公众平台或微信客户端。当type为空或者等于0时,表达发送给厂商服务器。当type为10001时,表达发送给微信客户端html5设备会话界面。当type为其他时,表达发送给公众平台服务器。具体的定义请看 附录:微信公众平台proto文献。举个例子,type等于1时,表达手环数据。Recv
20、DataPush厂商或微信客户端或微信公众平台发送数据给设备当type为空或者等于0时,表达厂商发送设备。当type为10001时,表达收到微信客户端html5设备会话界面的数据。当type为其他时,表达公众平台发送给设备。具体的定义请看 附录:微信公众平台proto文献。举个例子,type等于1时,表达手环数据。SwitchViewPush微信客户端进入退出界面的告知SwitchBackgroudPush微信客户端进入退出后台的告知3 错误码Proto里的错误码EEC_system微信客户端一般的错误EEC_needAuth设备未登录。需要登录。EEC_sessionTimeoutsessi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 蓝牙 外设 协议 beta
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【天****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【天****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。