几个基本要用的东西:
1、微信公众平台
网址:https://mp.weixin.qq.com
可以在此申请微信公众号,获取微信测试号。
微信测试号拥有所有功能权限,如果你有正式的企业服务号,就不必用测试号了。
2、微信JS-SDK说明文档
网址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html
到时候会引入一个JS文件,是用来调用微信提供的那些接口的
3、微信硬件平台说明文档
网址(新版):http://iot.weixin.qq.com/wiki/new/index.html
网址(旧版):http://iot.weixin.qq.com/wiki/index.html
新版和旧版唯一的区别是,新版没有JS硬件API的说明页(但可以在下载中心自己下载)
开始开发
1、首先,自己到微信公众平台申请一个微信公众号,就选个人订阅号。
2、登录你的公众号,进入公众平台管理页,左边最下面有个“开发者工具”。
3、点“开发者工具”,进去后找到“公众平台测试帐号”,自己按照步骤申请开通一个。
4、进入测试号管理页面,就会得到:
原始ID:gh_xxxxxxxxxx (右上角显示的,这个是微信原始ID,不是微信号)
(坑:微信原始ID 和 微信帐号不是同一个,微信帐号在之后都不会用到,用到的是原始ID)
appID:wxxxxxxxxxxxx (appID)
appsecret:xxxxxxxxxxxxxx (密钥)
5、测试号管理页面,下面找到“JS接口安全域名”,要配置成你们自己的服务器域名,后面有些微信API会返回数据,它会去匹配这个域名,如果不是指定的域名,会报错。
6、继续往下看,下面有个“体验接口权限表”,在里面找到“设备功能”,开通它
7、开通设备功能后,点右边的“设置”,进入设备功能页面
8、自己”添加产品”,随便搞,连接类型勾选”蓝牙”即可(添加完成后,该产品有个产品编号,后面设备授权时有用)
======= 以上是公众平台的配置,下面开始写前端代码 ======
1、新建HTML,基本结构写好。
2、引入”http://res.wx.qq.com/open/js/jweixin-1.0.0.js“,这个JS
3、写方法:
上面这个方法,在进入页面时应该首先被调用,这是初始化微信JS-SDK
其中:
beta 这个参数需设为true,才能调用那些微信还没有正式开放的新接口
appID,timestamp,nonceStr,signature这几个由后台传递到前端。
生成证书的方法JS-SDK文档中有,此处暂时省略
4:继续写方法
5、继续写方法:
6、扫描设备:
(是通过手机扫描附近的设备,得到设备的deviceid,然后进行绑定,不是用户扫描二维码进行绑定,所以这里介绍扫描设备的过程)
7、绑定和解除绑定
8、向设备发送数据
以上是前端页面中,基本就这些代码
在写前端页面时候,后端需要对设备进行授权,
当用户绑定了设备后,微信会不停的尝试连接设备,所以其实不用程序员写代码去连接设备。
下面来说一下遇到的各种坑:(上面内容中提到的就不说了)
1、开发流程:
①、硬件厂商,他们只要得到了设备的mac地址,就可以开始授权了(好像只要有蓝牙板子,就有mac地址了)。
②、然后再开始生产设备
③、然后才卖给用户
④、用户关注公众号,扫描设备(如果用的二维码方式,那就是扫二维码。我们没有用二维码那种方式)
⑤、用户绑定设备
⑥、微信自动连接设备
⑦、连接上后,就可以收发数据了
2、关于授权:
我们用的授权新接口,即不需要厂商提供deviceid,由微信分配deviceid
然后是授权时的那些参数:
product_id:就是你之前“添加设备”后,就会得到那个编号
connect_protocol:连接协议
只能填3,或者只能填1.你别弄成:3|1,
下面写了,安卓设备不能同时支持ble和经典蓝牙
iOS一切正常,但是填成3|1,你就发现安卓的ble蓝牙调用“getWXDeviceInfos”(获取设备信息),获取不到!
如果用户的手机是经典蓝牙,你就写一个html页面,搞个按钮叫“刷成经典蓝牙”,用户可以自己去更新设备属性(就是授权那个地方,不是可以更新设备属性吗,让你们后台工程师写个接口,用户可以自己去把connect_protocol刷成1)
3、IOS连接设备很快很稳定,安卓连不上设备,显示“已连接0个设备”:
在微信硬件平台的文档里面的某个地方,有一句话,说安卓设备要先订阅个什么东西,订阅上了,这个时候再连接就OK,因为设备只发了一次Auth和Init包,如果错过这个时机,就错过了…就再也连不上了,除非设备断电重启。
但IOS估计是订阅那个什么东西非常快,不会过期,所以一下就连上了。
4、关于设备向手机发数据:
设备发的数据,里面有两个值,一个代表包括包头包尾的总长度,一个代表除去包头包尾的长度,必须与所发数据的实际情况相对应,HTML页面中才能接收到。否则不报错,但也接收不到。