扫描并关注
微信硬件公众号

微信硬件平台

一、消息接收能力介绍

消息接收能力:即设备接收微信图片、音乐、文件、地理位置消息的能力。

微信硬件平台在连接千万设备的过程中,提出了"每个硬件都是一个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为建立连接的会话句柄