微信团队正式发布针对硬件设备的消息分享API,接入了该API的设备可以接收微信用户转发的部分微信消息。用户可以在聊天会话或朋友圈中长按音乐消息,微信位置分享,图片等格式的微信消息使用“打开”功能,将其转发给硬件设备进行处理。
目前已支持的消息格式有:图片,音乐,位置分享,文件,小视频和URL等。
|
|
在聊天会话中“打开”图片,修改设备昵称 |
|
|
|
在朋友圈中"打开"小视频或图片 |
凡支持处理音乐消息,微信位置分享,图片及文件等的设备,均可以通过以下流程接入该API: 1. 在已认证的服务号中开启“设备功能” 2. 添加新设备,并在“产品能力登记”中为产品申明所支持的消息接收能力,如“音乐消息”,“地理位置消息”等 3. 方案一,云端处理和分发,在"设备功能>设置"中配置额外的Call Back URL, 以接收和处理用户转发消息 4. 方案二,局域网通讯方式分发,在硬件设备固件中添加微信AirKiss 3.0 SDK, 以支持局域网发现和通讯 5. 用户使用微信“扫一扫”将设备添加到微信,即可在聊天会话中转发特定格式消息到硬件设备 注意:方案一,二可根据产品特性选择支持一种或两种均支持
微信团队 2016年8月
一、如何开通
"打开"分享功能的接入,需要实现设备在局域网内接收微信消息,或通过云端远程接收微信消息。
方案一
用户操作“打开”后,消息通过云端Call Back方式转发至开发者服务器,由开发者服务器按照目标设备ID进行消息分发和处理。
方案二
在设备固件中加入AirKiss3.0 SDK,实现局域网发现和通讯。Airkiss3.0 SDK需要根据设备的硬件平台来专门编译提供,目前采用线下邮件申请的方式。请填写申请表,并发送邮件至wxthings@foxmail.com,邮件标题请注明“微信Airkiss3.0 SDK申请”。
微信互联设备WIFI芯片/模组AirKiss静态库申请表
流程指引
1.申请认证公众号&开通设备功能
1.1公众号申请:
https://mp.weixin.qq.com 1.2登录公众平台,点击左边功能栏的"添加功能插件",选择"设备功能"。
图1 设备功能插件
点击"开通",阅读并同意《微信公众平台微信互联设备功能服务协议》。
图2 开通设备功能
图3 《微信公众平台微信互联设备功能服务协议》
2.添加产品
进行产品开发前,第三方需要在"公众平台-设备功能"内添加接入的产品。一个公众号允许添加多种产品(比如可以添加N款音箱和N款车机),每种添加成功的产品都默认获得微信硬件平台分配的100个设备授权配额。 2.1进入"设备功能",点击"添加产品"
图4 添加产品
2.2产品基础资料登记,如产品名称、描述、品类以及设备配置说明等。
图5 基础资料登记
2.3数据通道选择
图6 数据通道选择
使用消息接收能力,请选择微信硬件云标准接入方案,选择对应的数据通道,其中:
-
设备直连微信硬件云通道:设备使用微信硬件提供的SDK(SDK支持长按转发特性和直连微信硬件云,SDK调试部分在后面具体介绍),设备直接连接微信硬件云。
图7 设备直连微信硬件云通道
-
厂商云连接微信硬件云通道: 设备使用微信硬件提供的SDK(SDK支持长按转发特性),设备直连的是设备厂商的云,而设备厂商云通过设备openAPI对接微信硬件云(openAPI后面具体介绍)。
图8 厂商云连接微信硬件云通道
2.4能力选项
图9 能力登记
必须勾选"产品基础能力"—"连接能力"中的相关能力;"消息接收能力"中设备支持的相关能力。
-
基础能力类
若支持通过微信给设备配置网络(即Airkiss),则勾选微信配网; 若支持扫描"型号码"近场发现设备,则勾选局域网发现; 若支持通过局域网发送微信消息至设备,则勾选近场通讯;
-
微信消息类
若支持长按转发微信内的音乐至设备,则勾选音乐消息; 若支持长按转发微信内的地理位置至设备,则勾选地理位置消息; 若支持长按转发微信内的文件(包括图片&文件)至设备,则勾选文件消息; 2.5获取产品编号以及型号二维码 每款添加的产品,微信硬件平台都会为其分配一个产品编号(productid)和型号二维码,可在产品详情页面查找。 其中productid用于设备授权(必须使用,文章后面具体介绍设备授权环节),而型号二维码用户配置设备连接网络以及近场扫描绑定(不一定需要使用,设备厂商也可以使用一机一码,文章后面介绍)。
图10 产品编号&型号二维码
扫描型号二维码,微信会跳转进入相应的配置说明页面,用户可选择配置产品连网或者搜索身边的产品。 型号二维码演示视频:
http://v.qq.com/page/j/e/b/j0170txx5eb.html 型号二维码介绍
3.产品开发调试
3.1服务器配置 为了接收到微信侧转发给设备的消息(音乐、图片、地理位置、文件等),设备厂商需要在mp平台上配置接收微信消息的URL。若设备厂商需要支持云端转发的话,还会使用到微信硬件平台定义的设备端openAPI。配置启用后,微信转发的消息将会按照OpenAPI的接口定义以Json格式推送到开发者配置URL。
图11 应用端服务器配置
3.1.1登录公众平台,点击"设备功能",进入"设置"页面 3.1.2点击"修改配置"按钮,进入服务器配置填写页面。填写服务器地址(URL)、Token和EncodingAESKey。 其中URL是开发者用来接收微信互联设备消息和事件的接口URL。 Token可由开发者任意填写,用作生成签名(该Token会和接口URL中包含的Token进行对比,从而验证安全性)。 EncodingAESKey由开发者手动填写或随机生成,将用作消息体加解密密钥。 3.1.3选择消息加密方式:明文模式、兼容模式和安全模式。
(目前建议直接选择明文模式即可) 模式的选择与服务器配置在提交后会立即生效,请开发者谨慎填写及选择。加解密方式的默认状态为明文模式,选择兼容模式和安全模式需提前配置好相关加解密代码,详情请参考消息体签名及解密部分的文档。 3.2后台接口调试 3.2.1设备授权 调用
设备授权新接口,获取deviceid和二维码,然后利用获取到的deviceid更新设备属性(如mac地址,connect_protocol等)。 获取到的二维码即为一机一码,设备厂商利用二维码生成器把获取到的二维码串生成为二维码,用户扫描该二维码后,关注厂商公众号,即可绑定设备。 注意:
-
利用deviceid更新设备属性时,ble_simple_protocol请勿填写,op_type填1。
3.2.2接收设备绑定/解绑事件 用户扫描一机一码,关注厂商公众号,即可绑定设备,此时厂商会接收到微信硬件平台推送的绑定事件。绑定关系即deviceid(设备id)与openid(用户id)的关系。若用户解绑设备,厂商会收到解绑事件。 具体接口为
接收设备绑定解绑事件 3.2.3其他API 微信消息长按转发特性并不依赖于后台接口其余的API,但厂商仍可调用,以下举例说明。
获取设备绑定openid: 通过device type和device id获取设备主人的openid。
通过openid获取用户绑定的deviceid WiFi设备连接状态实时查询 调用该接口可以在公众号顶部显示wifi设备的连接状态,若wifi设备已连网,则会显示"已连接",若未连网则会显示"未连接"。
若厂商不希望在公众号顶部显示该连接状态,可以在mp平台—设备功能—设置中关闭该状态显示。
4.openAPI调试(该API用于云端转发消息给设备)
微信硬件平台和设备云端URL消息交互,分成三种消息类型:
-
微信硬件平台查询设备消息:当微信硬件平台侧需要查询设备信息的时候,微信硬件平台将会POST查询消息发送到设备云端URL上,设备云端收到请求后,立即返回成功收到请求。待设备云端异步查询成功后,将查询结果POST给微信硬件平台。
-
微信硬件平台设置设备消息:当微信硬件平台侧需要设置设备信息的时候,微信硬件平台将会POST设置消息发送到设备云端URL上,接入者收到请求后,立即返回成功收到请求。待设备云端异步设置设备成功后,将设置结果POST给微信硬件平台。
-
设备云端通知微信硬件平台消息:当设备状态有变化或者有消息需要通知微信硬件平台侧时候,设备云端POST消息给微信硬件平台。微信硬件平台立即返回成功收到请求。待微信硬件平台将消息处理成功后,将处理消息成功的行为POST给设备云端URL上。
4.1设备查询(GET) 硬件云端以POST方式推送JSON格式的查询消息到设备厂商云端,设备厂商云端收到请求后先回复收到请求,当设备厂商查询好设备数据后,使用POST方式响应微信查询结果。 4.1.1查询请求(Request) 微信硬件云端向设备厂商发起POST查询请求,POST的JSON格式为:
{
"device_id": "device_id",
"device_type": "device_ type",
"msg_id": 1234567890123456,
"user": "user", // operator操作者唯一标识ID
"msg_type": "get", //区分消息类型字段
"services": { //内容为具体的能力项和能力属性
"operation_status": {
"status": 0
},
...
}
}
请设备厂商云端收到请求后应立即回包,否则微信硬件云端会重试上面的POST请求。 回包格式为:
{
"error_code": 0,
"error_msg": "ok"
}
接收方处理完业务后,异步返回查询结果,具体方法请见下节。
标签 |
类型 |
取值限制 |
含义 |
device_id |
string |
无 |
设备DEVICE_ID或者子设备DEVICE_ID编码,唯一标识设备 |
device_type |
string |
无 |
设备类型,目前为"公众账号原始ID" |
msg_id |
int64 |
64位整型 |
消息序列号,用于异步通信,用于异步通信,由微信生成,接收方异步返回的时候带上 |
user |
string |
无 |
operator操作者唯一标识ID |
msg_type |
string |
get |
消息类型命令字,get代表设备查询消息 |
services |
string |
|
能力项键集合(定义详见附录) |
operation_status |
string |
|
要求异步必须返回运行状态能力项服务 |
status |
int8 |
|
要求异步必须返回运行状态能力项属性 |
error_code |
int16 |
|
厂商是否成功接收,0代码成功(其它错误码见附录) |
error_msg |
string |
|
厂商返回成功接收的信息 |
表4 查询请求参数说明
4.1.2查询响应(Response) 设备厂商云端查询完设备后,将结果POST给微信云端URL,JSON格式:
{
"asy_error_code": 0,
"asy_error_msg": "ok",
"device_id": "device_id",
"device_type": "device_ type",
"msg_id": 1234567890123456,
"msg_type": "get",
"services": {
"operation_status": {
"status": 0
},
...
}
}
微信硬件云端成功处理后将会回复:
{
"error_code": 0,
"error_msg": "ok"
}
stringstringint64string
字段 |
类型 |
取值范围 |
描述 |
asy_error_code |
int16 |
|
设备厂商异步查询结果,0代表厂商异步查询成功,其他错误请见附录 |
asy_error_msg |
string |
|
设备厂商异步查询结果的,消息文本描述 |
device_id |
|
和请求体里面device_id一致 |
|
device_type |
|
和请求体里面device_type一致 |
|
msg_id |
|
和请求体里面msg_id一致 |
|
user |
|
和请求体里面user一致 |
|
msg_type |
string |
和请求里面的msg_type一样,为get |
|
services |
string |
|
能力项键集合(定义详见附录) |
operation_status |
string |
|
返回运行状态能力项服务 |
status |
int8 |
|
返回运行状态能力项属性 |
error_code |
int16 |
|
0代表微信平台成功接收厂商的异步设置(其他错误码见附录) |
error_msg |
string |
|
错误消息文本描述 |
表5 查询响应参数说明
4.1.3举例 微信硬件云端发起查询请求向硬件开发者云端查询设备数据:
{
"device_id": "device_id",
"device_type": "device_ type",
"msg_id": 1234567890123456,
"user": "user",
"msg_type": "get",
"services": {
"operation_status": {
"status": 0
},
"wxmsg_music": {
"artist": "",
"url": "",
"data_url": "",
"low_data_url": ""
}
}
设备厂商云端收到请求后,应当立即返回:
{
"error_code": 0,
"error_msg": "ok"
}
设备厂商云端查询成功后,POST数据给微信硬件云端URL:
{
"asy_error_code": 0,
"asy_error_msg": "ok",
"device_id": "device_id",
"device_type": "device_ type",
"msg_id": 1234567890123456,
"msg_type": "get",
"services": {
"operation_status": {
"status": 1
},
"wxmsg_music": {
"artist": "artist",
"url": "url",
"data_url": "data_url",
"low_data_url": "low_data_url"
}
}
}
微信硬件云端返回:
{
"error_code": 0,
"error_msg": "ok"
}
4.2设备控制 微信硬件云端服务器POST设置消息到设备厂商,设备厂商立即回复收到,当设备厂商云端设置成功后,发送响应消息通知微信硬件云端已经成功处理。 4.2.1设置请求(Request) 微信POST设置消息给硬件开发者云端URL,JSON格式:
{
"device_id": "device_id",
"device_type": "device_ type",
"msg_id": 1234567890123456,
"user": "user",
"msg_type": "set",
"services": {
...
}
}
请设备厂商云端收到请求后应立即回包,否则微信硬件云端会重试上面的POST请求。 回包格式为:
{
"error_code": 0,
"error_msg": "ok"
}
接收方处理完业务后,异步返回设置结果,具体方法请见下节。
标签 |
类型 |
取值限制 |
含义 |
device_id |
string |
无 |
设备DEVICE_ID或者子设备DEVICE_ID编码,唯一标识设备 |
msg_id |
int64 |
64位整型 |
消息序列号,用于异步通信,由微信生成,接收方异步返回的时候带上 |
device_type |
string |
无 |
设备类型,目前为"公众账号原始ID" |
user |
string |
无 |
operator操作者唯一标识ID |
msg_type |
string |
set |
消息类型命令字,set代表设备控制消息 |
services |
string |
|
能力项键集合(定义详见附录) |
error_code |
int16 |
|
厂商是否成功接收,0代码成功(其他错误码见附录) |
error_msg |
string |
|
厂商返回成功接收的信息 |
表6 设置请求参数说明
4.2.2设置响应(Response) 设备端查询完设备后,将结果POST给微信硬件云端URL, JSON格式:
{
"asy_error_code": 0,
"asy_error_msg": "ok",
"device_id": "device_id",
"device_type": "device_ type",
"msg_id": 1234567890123456,
"msg_type": "set",
"services": {
"operation_status": { //必须返回运行状态能力项服务
"status": 1//必须返回运行状态能力项属性
},
...
}
}
微信硬件云端成功处理后将会回复:
{
"error_code": 0,
"error_msg": "ok"
}
标签 |
类型 |
取值限制 |
含义 |
asy_error_code |
int16 |
|
设备厂商异步设置结果,其他错误请见附录 |
asy_error_msg |
string |
|
设备厂商异步查询结果的,消息文本描述 |
device_id |
string |
和请求体里面device_id一致 |
|
device_type |
string |
和请求体里面device_type一致 |
|
msg_id |
int64 |
和请求体里面msgi_id一致 |
|
user |
string |
和请求体里面user一致 |
|
msg_type |
string |
和请求里面的msg_type一样,为set |
|
services |
string |
|
能力项键集合(定义详见附录) |
operation_status |
string |
|
必须返回运行状态能力项服务 |
status |
int8 |
|
必须返回运行状态能力项属性 |
error_code |
int16 |
|
0代表微信平台成功接收厂商的异步设置,(其他错误码见附录) |
error_msg |
string |
|
错误消息文本描述 |
表7 设置响应参数说明
4.2.3举例 例一, 微信硬件云端向设备厂商云端发送微信音乐消息:
{
"device_id": "device_id",
"device_type": "device_ type",
"msg_id": 1234567890123456,
"user": "user",
"msg_type": "set",
"services": {
"wxmsg_music": {
"artist": "artist",
"url": "url",
"data_url": "data_url",
"low_data_url": "low_data_url"
}
}
}
设备厂商云端接收到请求后响应:
{
"error_code": 0,
"error_msg": "ok"
}
设备厂商云端处理成功后,POST数据给微信硬件云端URL:
{
"asy_error_code": 0,
"asy_error_msg": "ok",
"device_id": "device_id",
"device_type": "device_ type",
"msg_id": 1234567890123456,
"msg_type": "set",
"services": {
"operation_status": {//必须返回运行状态能力项服务
"status": 1//必须返回运行状态能力项属性
},
"wxmsg_music": {
"artist": "artist",
"url": "url",
"data_url": "data_url",
"low_data_url": "low_data_url"
}
}
微信硬件云端返回:
{
"error_code": 0,
"error_msg": "ok"
}
例二,微信硬件云端向设备厂商云端端发送地图消息:
{
"device_id": "device_id",
"device_type": "device_ type",
"msg_id": 1234567890123456,
"user": "user",
"msg_type": "set",
"services": {
"wxmsg_poi": {
"latitude": 1.20000004768,
"longitude": 1.29999995232,
"scale": 1.29999995232,
"label": "lable"
}
}
}
设备厂商接收到请求后返回:
{
"error_code": 0,
"error_msg": "ok"
}
设备厂商设置成功后,POST数据给微信硬件云端:
{
"asy_error_code": 0,
"asy_error_msg": "ok",
"device_id": "device_id",
"device_type": "device_ type",
"msg_id": 1234567890123456,
"msg_type": "set",
"services": {
"operation_status": {//必须返回运行状态能力项服务
"status": 1//必须返回运行状态能力项属性
},
"wxmsg_poi": {
"latitude": 1.20000004768,
"longitude": 1.29999995232,
"scale": 1.29999995232,
"label": "lable"
}
}
微信硬件云端返回:
{
"error_code": 0,
"error_msg": "ok"
}
4.3状态变更通知(NOTIFY) 当设备有事件发生或者有消息,需要通知到微信硬件云端的时候,设备通过设备厂商云端发送消息到微信硬件云端。微信硬件云端立即回复成功收到消息给设备云厂商。当微信硬件云端处理消息成功后,将处理消息成功的行为,POST给设备云厂商。 对应微信云端API的URL:
https://api.weixin.qq.com/hardware/mydevice/platform/notify?access_token=xxxx
参数 |
是否必填 |
备注 |
access_token |
必填 |
公众号access_token,详见http://mp.weixin.qq.com/wiki/2/88b2bf1265a707c031e51f26ca5e6512.html |
表8 数据接口API参数说明
4.3.1通知请求(Request) 设备厂商云端POST方式推送消息给微信硬件云端服务器,JSON格式:
{
"device_id": "device_id",
"device_type": "device_ type",
"msg_type": "notify",
"services": {
"operation_status": {
"status": 1
},
...
}
}
微信硬件云端响应JSON格式包,里面带有本次notify的唯一标识msg_id:
{
"error_code": 0,
"error_msg": "ok",
"msg_id": 1234567890123456
}
标签 |
类型 |
取值限制 |
含义 |
device_id |
string |
无 |
设备DEVICE_ID或者子设备DEVICE_ID编码,唯一标识设备 |
device_type |
string |
无 |
设备类型,目前为"公众账号原始ID" |
msg_id |
int64 |
64位整型 |
消息序列号,用于异步通信,微信生成,厂家通知完之后,微信返回ack包里面会带有msg_id |
msg_type |
string |
notify |
消息类型命令字,notify代表通知消息 |
mandatory_services |
string |
|
通知微信侧,必须带有能力项集合 |
operation_status |
string |
|
通知微信侧,必须带有运行状态能力项服务 |
status |
int8 |
|
通知微信侧,必须带有运行状态能力项属性 |
services |
string |
|
能力项键值集合 |
error_code |
int16 |
|
微信是否成功接收,0代码成功(其他错误码见附录) |
error_msg |
string |
|
微信返回成功接收的信息 |
表9 状态变更通知请求参数说明
4.3.2通知响应(Response) 微信硬件云端将数据成功处理后,将成功处理的行为POST给设备厂商云端,JSON格式:
{
"asy_error_code": 0,
"asy_error_msg": "ok",
"device_id": "device_id",
"device_type": "device_ type",
"msg_id": 1234567890123456,
"msg_type": "notify",
"services": {
"operation_status": {
"status": 1
}
...
}
}
设备厂商云端应当返回:
{
"error_code": 0,
"error_msg": "ok"
}
标签 |
类型 |
取值限制 |
含义 |
asy_error_code |
int16 |
|
设备厂商异步设置结果,其他错误请见附录 |
asy_error_msg |
string |
|
设备厂商异步查询结果的,消息文本描述 |
device_id |
string |
和请求体里面device_id一致 |
|
device_type |
string |
和请求体里面device_type一致 |
|
msg_id |
int64 |
和微信返回请求体里面的msgi_id一致 |
|
msg_type |
string |
和请求里面的msg_type一样,为notify |
|
mandatory_services |
string |
和请求里面的mandatory_services一样 |
|
operation_status |
string |
和请求里面的operation_status一样 |
|
status |
int8 |
和请求里面的status一样 |
|
services |
string |
和请求里面的services一样 |
|
表10 状态变更通知响应参数说明
4.3.3举例 设备通知微信硬件云端: 设备厂商云端通知微信:
{
"device_id": "device_id",
"device_type": "device_ type",
"msg_type": "notify",
"services": {
"operation_status": {
"status": 1
},
"wxmsg_music": {
"artist": "artist",
"url": "url",
"data_url": "data_url",
"low_data_url": "low_data_url"
}
}
微信硬件云端收到后立即回复:
{
"error_code": 0,
"error_msg": "ok"
"msg_id": 1234567890123456
}
微信硬件云端将数据成功处理后,将结果POST给设备厂商云端:
{
"asy_error_code": 0,
"asy_error_msg": "ok",
"device_id": "device_id",
"device_type": "device_ type",
"msg_id": 1234567890123456,
"msg_type": "notify",
"services": {
"operation_status": {
"status": 1
},
"wxmsg_music": {
"artist": "artist",
"url": "url",
"data_url": "data_url",
"low_data_url": "low_data_url"
}
}
}
设备厂商云端收到后返回:
{
"error_code": 0,
"error_msg": "ok"
}
4.4附录 4.4.1ERROR_CODE
取值 |
描述 |
0 |
请求成功 |
-1 |
系统繁忙,此时请开发者稍候再试 |
11000 |
未注册到微信平台,参考接入须知 |
11001 |
URL参数不合法 |
11002 |
POST数据不合法 |
11003 |
signature不合法,请参考接入须知signature生成规则 |
11004 |
缺少必选能力项/属性值 |
11005 |
异步通知的device_id和请求的device_id不一致 |
11006 |
device_id不合法,请注册device_id |
11007 |
异步通知的msg_type和请求的msg_type不一致 |
11008 |
msg_id的相关的会话已经关闭 |
表11 ERROR_CODE定义
4.4.2ASY_ERROR_CODE
取值 |
描述 |
0 |
厂家异步处理成功 |
11500 |
系统繁忙 |
11501 |
设备没联网 |
11502 |
设备已经关机 |
11503 |
设备暂时无法操作,请微信平台稍后重试 |
表12 ASY_ERROR_CODE定义
4.4.3自助调试工具 调试阶段,厂商可以自助发送消息给微信硬件云端,微信硬件云端将消息转发到厂商接入的URL上(参见接入须知), 微信硬件云端上自助工具的地址:
https://api.weixin.qq.com/hardware/mydevice/platform/sendmsgtodevicecloud?access_token=xxxx
POST内容为JSON,硬件平台将对JSON内容进行检验,并将内容转发到厂商云端。 curl自助工具举例:
curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache" -d ‘{"device_id":"xxxxx","device_type":"xxxxx","user":"openid","msg_id":1234567890123456,"msg_type":"set","services":{"wxmsg_music":{"title":"title","artist":"artist","url":"url","data_url":"data_url","low_data_url":"low_data_url"}}}’ ‘ http://api.weixin.qq.com/hardware/mydevice/platform/sendmsgtodevicecloud?access_token=xxxx
微信云端响应
{
"error_code": 0,
"error_msg": "ok"
}
表示校验JSON成功。 备注:如果校验JSON不成功,还是会将数据透传给设备厂商云端。
5.SDK开发(兼容SDK则支持近场转发微信消息)
5.1
Android SDK下载链接 5.2Android版本使用说明 对于运行于Android系统的设备,微信提供对应的SDK(.so库)且不依赖于设备所使用的Android版本,开发者只需要将SDK动态库和API类文件加载到App中即可,目前文件包括:libairkiss3.so, libstlport_shared.so,/com/tencent/wechat/AirKiss3.java共3个文件,注意不得修改包名及方法名否则动态库无法使用,SDK运行中会通过Logcat打印数据,使用过程中遇到问题可以把log导出。详细的工程和代码示例请参考HelloJni工程,可以通过Eclipse直接import的方式导入:
动态库和接口文件在工程中的结构如下:
5.2.1加载动态库 由于SDK需要用到网络,如果是新建工程记得在xml中添加网络权限。设备App启动以后,需要加载对应的动态库,如果App有Application入口,可以放在Application入口处:
5.3API接口说明 5.3.1初始化设备函数 设备初始化函数用于给设备分配内存空间,初始化参数。初始化成功后,结束时必须调用释放设备函数,防止内存泄漏。
接口原型 |
public static native long deviceInit(String deviceType, String deviceId, String deviceName, int services, short port) |
参数 |
String deviceType |
设备类型,一般指公众号名字,形如gh_XXXXXXXX |
|
String deviceId |
设备授权时的设备Id |
|
String deviceName |
设备名字,可不填 |
|
int services |
设备支持的服务类型,可同时支持多个。位值见附录1设备服务类型 |
|
short port |
设备监听的tcp服务端口 |
返回值 |
long |
初始化成功则返回设备句柄,失败则返回0 |
5.3.2释放设备函数 释放设备函数用于给释放设备初始化时分配的内存空间。
接口原型 |
public static native void deviceFree(long deviceHandle) |
参数 |
long deviceHandle |
设备初始化时返回的设备句柄 |
返回值 |
无 |
|
5.3.3开启设备服务函数
接口原型 |
public static native int deviceStart(long deviceHandle) |
参数 |
long deviceHandle |
设备初始化时返回的设备句柄 |
返回值 |
int |
启动成功返回0,启动失败返回负值 |
5.3.4停止设备服务函数
接口原型 |
public static native void deviceStop(long deviceHandle) |
参数 |
long deviceHandle |
设备初始化时返回的设备句柄 |
返回值 |
无 |
|
5.3.5设备通知函数
接口原型 |
public static native void deviceNotify(long sessionId , String notifyData) |
参数 |
long sessionId |
设备初始化时返回的会话句柄 |
|
notifyData |
目前只支持JSApi数据。格式见附录2设备通知数据格式 |
返回值 |
无 |
|
5.3.6设备事件回调函数 注意:设备事件回调函数,由运行于JNI层的线程来调用,建议此回调函数中不要直接处理业务,而是将数据发送给工作线程来处理
接口原型 |
public static void onDeviceCallback(long deviceHandle, int event, int error, byte[] data, long sessionId) |
参数 |
long deviceHandle |
设备初始化时返回的设备句柄 |
|
int event |
设备回调的事件类型,详见附录3回调事件类型及数据格式 |
|
int error |
出错回调时的错误码 |
|
byte[] data |
回调事件时的数据,详见附录3回调事件类型及数据格式 |
|
long sessionId |
产生回调的会话句柄 |
返回值 |
无 |
|
5.4附录 附录1 设备服务类型
取值 |
描述 |
0x01 |
AK3_SERVICE_WECHAT_MUSIC : 支持接收音乐消息 |
0x02 |
AK3_SERVICE_WECHAT_FILE : 支持接收文件 |
0x04 |
AK3_SERVICE_WECHAT_POI : 支持接收POI位置消息 |
0x08 |
AK3_SERVICE_WECHAT_JSAPI : 支持JSApi功能 |
附录2 设备通知数据格式
{
"services": {
"wxmsg_jsapi": {
"data": "aGVsbG8gd29ybGQ="
}
}
}
附录3 回调事件类型及数据格式
取值 |
描述 |
数据格式 |
-2 |
AK3_EVENT_TCP_DISCONNECTED |
无,sessionId为断开连接的会话句柄 |
-1 |
AK3_EVENT_ERROR |
无 |
1 |
AK3_EVENT_WECHAT_MUSIC |
JSON格式(安卓为UTF-8编码的字符串) { "device_id": "device_id", "device_type": "device_type", "msg_id": 1234567890123456, "user": "operator操作者ID", "msg_type": "set", "services": { "wxmsg_music": { "artist": "artist", "url": "url", "data_url": "data_url", "low_data_url": "low_data_url", "title": "title" } } } |
2 |
AK3_EVENT_WECHAT_FILE |
JSON格式(安卓为UTF-8编码的字符串) { "device_id":"personalHardware1", "device_type":"gh_133118144c31", "user":"oAAAAADGHlE23OmJrGZ-tjQjI99E", "msg_id":36985, "msg_type":"set", "services":{ "wxmsg_file":{ "type":"pdf", "name":"ch03.pdf", "size":858571, "md5":"74a86f3b763f19f3d88a13783346532c" } } } |
3 |
AK3_EVENT_WECHAT_FILE_DATA |
二进制数据 |
4 |
AK3_EVENT_WECHAT_POI |
JSON格式(安卓为UTF-8编码的字符串) { "device_id": "device_id", "device_type": "device_type", "user": "operator操作者ID", "msg_id": 1234567890123456, "msg_type": "set", "services": { "wxmsg_poi": { "latitude": 1.20000004768, "longitude": 1.29999995232, "scale": 1.29999995232, "label": "lable" } } } |
5 |
AK3_EVENT_WECHAT_JSAPI_OPEN |
JSON格式(安卓为UTF-8编码的字符串) { "services": { "wxmsg_jsapi": { "cmd": "open" } } } |
6 |
AK3_EVENT_WECHAT_JSAPI_CLOSE |
JSON格式(安卓为UTF-8编码的字符串) { "services": { "wxmsg_jsapi": { "cmd": "close" } } } |
7 |
AK3_EVENT_WECHAT_JSAPI_DATA |
JSON格式(安卓为UTF-8编码的字符串) { "services": { "wxmsg_jsapi": { "data": "aGVsbG8gd29ybGQ=" } } } |
8 |
AK3_EVENT_TCP_ACCEPTED |
无,sessionId为建立连接的会话句柄 |