一、消息接收能力介绍
消息接收能力:即设备接收微信图片、音乐、文件、地理位置消息的能力。
微信硬件平台在连接千万设备的过程中,提出了"每个硬件都是一个APP"的全新概念。这意味着每个硬件都能像APP一样,可以把消息分享到微信,同时可以接收并处理微信内的原生消息。
以下是示例视频:http://v.qq.com/boke/page/d/0/i/d0179errimi.html
长按微信会话内的图片、音乐、地理位置等消息,会出现"打开"选项,点击可以把对应消息直接发送给用户绑定的微信互联设备,用设备打开消息。如长按音乐,就可以将音乐发送给音箱播放,长按图片可以发送给相框展示,长按地理位置可以发送给车机导航。同时设备也可以往微信发消息,比如直接从相机发送相片到微信。
二、消息接收能力接入指引
接入申请
微信消息接收能力的接入,需要同时实现设备在Wi-Fi近场条件下接收微信消息,以及通过云端远程接收微信消息。其中,Wi-Fi近场条件下接收微信消息需要支持微信SDK——Airkiss3.0。
由于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
型号二维码介绍:
?page=4-6
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设备授权
调用
?page=3-4-6接口,获取deviceid和二维码,然后利用获取到的deviceid更新设备属性(如mac地址,connect_protocol等)。
获取到的二维码即为一机一码,设备厂商利用二维码生成器把获取到的二维码串生成为二维码,用户扫描该二维码后,关注厂商公众号,即可绑定设备。
注意:
设备授权时必须填上productid。
利用deviceid更新设备属性时,ble_simple_protocol需勿填写,op_type填1。

3.2.2接收设备绑定/解绑事件
用户扫描一机一码,关注厂商公众号,即可绑定设备,此时厂商会接收到微信硬件平台推送的绑定事件。绑定关系即deviceid(设备id)与openid(用户id)的关系。若用户解绑设备,厂商会收到解绑事件。
具体接口为
?page=3-4-2
3.2.3其他API
微信消息长按转发特性并不依赖于后台接口其余的API,但厂商仍可调用,以下举例说明。
获取设备绑定openid: 通过device type和device id获取设备主人的openid。
?page=3-4-11
通过openid获取用户绑定的deviceid:
?page=3-4-12
WiFi设备连接状态实时查询:
?page=3-4-13
调用该接口可以在公众号顶部显示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"
}
字段 |
类型 |
取值范围 |
描述 |
asy_error_code |
int16 |
|
设备厂商异步查询结果,0代表厂商异步查询成功,其他错误需见附录 |
asy_error_msg |
string |
|
设备厂商异步查询结果的,消息文本描述 |
device_id |
string |
和需求体里面device_id一致 |
|
device_type |
string |
和需求体里面device_type一致 |
|
msg_id |
int64 |
和需求体里面msg_id一致 |
|
user |
string |
和需求体里面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.1SDK下载链接:
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为建立连接的会话句柄 |