edit

Android 开发文档

概述

App 开发之前请先申请相关账号:

  • 申请第三方平台登录账号目前支持 QQ,微信,微博,Google,Twitter,Facebook
  • 申请个推账号
  • 申请Hekr平台企业账号,并完善相关信息

开发准备

使用SDK开发之前请务必通读本文档

集成准备

1、下载SDK配置文件

2、快速导入SDK

  • Please ensure that you are using the latest version by Download

  • Gradle:

        compile 'me.hekr.hekrsdk:hekrsdk:1.2.4'
    

  • Maven:
    <dependency>
      <groupId>me.hekr.hekrsdk</groupId>
      <artifactId>hekrsdk</artifactId>
      <version>1.2.4</version>
      <type>pom</type>
    </dependency>
    
  • Or download hekrSDK aar

一、配置

  • 说明:本SDK中已使用以下依赖,请勿重复配置!
    android-async-http-1.4.9.jar
    annotations-java5-15.0.jar
    eventbus-3.0.0.jar
    fastjson-1.1.52.android.jar
    httpclient-4.4.1.2.jar
    jmdns-3.2.2.jar
    lite-common-1.1.3.jar
    websocket.jar
    //第三方登录 qq/wechat/weibo
    libammsdk.jar
    mta-sdk-1.6.2.jar
    weiboSDKCore_3.1.2.jar
    open_sdk_r5509.jar
    
  • 在项目res目录下创建raw目录,将下载包中的config.json复制进去,config.json为项目的配置文件和第三方登录配置文件(填写各大平台申请的参数)。
  • config.json文件配置说明:文件格式不可变,pid为在氦氪console平台 注册企业开发者后在个人中心->认证信息中相应的企业pid,配置文件中其他第三方登录数据在各大第三方平台申请填写,如不需要使用某些第三方登录则在相应位置留空即可。
    "Hekr": {
        "AppId": "xxxxxx"
    }
    配置文件中Hekr之下AppId:氦氪console平台的pid,登录氦氪console平台之后可在右上角个人中心查看。
    配置文件中的Social、push为第三方登录、个推推送平台信息,如不需要置""即可。
    
  • 如果需要第三方微信登录,则必须将下载包中的wxapi文件夹复制项目包名目录(微信开放平台填写的包名)下!【具体参考微信开放平台文档
  • 请在氦氪console平台申请App定制开发。

1.1、设置AndroidManifest.xml声明Activity

<!--第三方登录 qq 如果需要qq登录则配置,不需要则不用配置-->
<activity
    android:name="com.tencent.tauth.AuthActivity"
    android:launchMode="singleTask"
    android:noHistory="true"
    android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <!--此处为腾讯开放平台申请的ApiId-->
            <data android:scheme="tencent0000000000" />
        </intent-filter>
</activity>
<activity
    android:name="com.tencent.connect.common.AssistActivity"
    android:configChanges="orientation|keyboardHidden|screenSize"
    android:screenOrientation="portrait" />

<!--第三方登录 weibo 如果需要weibo登录则配置,不需要则不用配置-->
 <activity
    android:name="com.sina.weibo.sdk.component.WeiboSdkBrowser"
    android:configChanges="keyboardHidden|orientation"
    android:exported="false"
    android:screenOrientation="portrait"
    android:windowSoftInputMode="adjustResize" />
<!--第三方登录 wechat 如果需要wechat登录则配置,不需要则不用配置-->
<activity
    android:name=".wxapi.WXEntryActivity"
    android:exported="true"
    android:screenOrientation="portrait">
        <intent-filter>
             <category android:name="android.intent.category.default" />
        </intent-filter>
</activity>

1.2、在项目Application下进行sdk的初始化工作

HekrSDK.init(getApplicationContext(), R.raw.config);
//打开log,默认为false
HekrSDK.openLog(true);

二、用户接口

氦氪用户接口包括了用户的注册、登录等部分。开发者需要先通过1.1和1.2正确初始化SDK后进行操作。

2.1、用户注册

用户注册分为手机号码注册和邮箱注册。

手机号注册 流程示例code

//1.获取图形验证码
hekrUserAction.getImgCaptcha()
//2.校验图形验证码
hekrUserAction.checkCaptcha()
//3.发送短信验证码
hekrUserAction.getVerifyCode()
//4.校验短信验证码
hekrUserAction.checkVerifyCode()
//5.使用手机号注册
hekrUserAction.registerByPhone()
邮箱注册 示例code
//使用邮箱注册
hekrUserAction.registerByEmail()

2.2、用户登录

hekrUserAction.login(String userName,String passWord,HekrUser.LoginListener loginListener);
参数

key 类型及范围 说明
userName String 用户名
passWord String 用户密码

返回结果

{
    "access_token": "xxx",
    "refresh_token": "xxx",
    "token_type": "bearer",
    "expires_in": 86399,
    "jti": "7ee5ade2-3d6b-4581-93b6-fea526337742"
}
示例code
import me.hekr.hummingbird.action.HekrUser;
import me.hekr.hummingbird.action.HekrUserAction;

private HekrUserAction hekrUserAction;

hekrUserAction = HekrUserAction.getInstance(context);

hekrUserAction.login(userName, passWord, new HekrUser.LoginListener() {
    @Override
    public void loginSuccess(String str) {
            //登录成功
        }
    @Override
    public void loginFail(int errorCode) {
            //登录失败            
        }
    });

2.3、第三方登录

注意:

  • 若要使用第三方登录,必须先在各大平台中申请第三方登录权限,申请通过后将key值填写至config.json中,根据1.1中的说明将第三方的Activity在AndroidManifest.xml中填写完整!
  • 在hekr console平台 定制App管理之下的OAUTH账号管理填写相关ApiKey ApiSecret,如第三方平台无该项直接留空即可。

示例code

 qq_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(LoginActivity.this, HekrOAuthLoginActivity.class);
                    //第二个参数为第三方类型
                intent.putExtra(HekrOAuthLoginActivity.OAUTH_TYPE, HekrUserAction.OAUTH_QQ);
                    //第二个参数为第三方类型
                startActivityForResult(intent, HekrUserAction.OAUTH_QQ);
            }
        });

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (data != null) {
            String certificate = data.getStringExtra(HekrOAuthLoginActivity.OAUTH_CODE);
            if (!TextUtils.isEmpty(certificate)) {
                switch (requestCode) {
                    case HekrUserAction.OAUTH_QQ:
                        //之后可通过 氦氪openapi文档中3.13 或者 3.17 进行操作
                        break;
                    case HekrUserAction.OAUTH_WECHAT:
                        //之后可通过 氦氪openapi文档中3.13 或者 3.17 进行操作
                        break;
                    case HekrUserAction.OAUTH_SINA:
                        //之后可通过 氦氪openapi文档中3.13 或者 3.17 进行操作
                        break;
                }
            }
        }
    }
| 第三方类型 | 说明 | |:----------------------------|:-----| | HekrUserAction.OAUTH_QQ | QQ | | HekrUserAction.OAUTH_WECHAT | 微信 | | HekrUserAction.OAUTH_SINA | 微博 |

注意:移动端第三方登录中微博登录需要uid参数,sdk中已直接将uid参数封装至获取到certificate中,所以微博登录时可省略掉uid参数。或者直接使用SDK中的hekrUserAction.OAuthLogin();

https://uaa-openapi.hekr.me/MOAuth?type=SINA&pid=0000000000&clientType=ANDROID&certificate=certificate

SDK示例Code

//通过上一步拿到的certificate进行第三方登录
hekrUserAction.OAuthLogin(HekrUserAction.OAUTH_SINA,certificate, new HekrUser.MOAuthListener() {
    @Override
    public void mOAuthSuccess(MOAuthBean moAuthBean) {
        //该OAuth账号还未和主账号绑定
        }

    @Override
    public void mOAuthSuccess(JWTBean jwtBean) {
         //该OAuth账号已经和主账号绑定
        }

    @Override
   public void mOAuthFail(int errorCode) {
        //失败
        }
    });

2.4、当前用户token

示例code(调用此接口前用户必须登录成功)

//用户token
hekrUserAction.getJWT_TOKEN();
//用户唯一ID
hekrUserAction.getUserId();

三、设备配网

配网说明:仅适用于氦氪固件4.1.11.1及以上版本 配网示例

3.0、App配网流程

1、App获取PINCode

2、App将ssid、pwd、PINCode采用UDP协议发送至模块。

3、App在做第二步的同时,获取当前局域网设备直至配网结束。

3.1、开始配网

操作说明:请让模块处于配网模式

/**
* @param ssid wifi名称
* @param pwd wifi密码
* @param number 单次配网总时间
*/
smartConfig.startConfig(ssid, pwd, number, new SmartConfig.NewDeviceListener() {

            //单次配网时间内查询到的所有新设备(回调每次查询到的新设备)
            @Override
            public void getDeviceList(List<NewDeviceBean> newDeviceList) {

            }

            //单次配网时间内查询到的新设备(一旦有新的设备就会触发该回调接口)
            //只有newDeviceBean中属性bindResultCode值为0才算真正将该设备绑定到了自己账号下
            @Override
            public void getNewDevice(NewDeviceBean newDeviceBean) {

            }

            //单次配网时间内查到新设备
            @Override
            public void getDeviceSuccess() {

            }

            //单次配网时间内未查询到任何新设备
            @Override
            public void getDeviceFail() {

            }
        });

3.2、停止配网

注:(如不主动停止,将会在开始配网设置的时间内结束配网)

smartConfig.stopConfig();

3.3、补充说明

配网模式: wifi模块在间隔2秒闪烁表示进入配网模式

新设备定义: App配网过程中,模块处于以下情况App查询到的设备

  • 模块处于配网模式,成功绑定自己本次配网所用账号的设备,判定依据NewDeviceBean 属性bindResultCode值为0
  • 模块处于配网模式,但已被别人绑定的设备,判定依据NewDeviceBean 属性bindResultCode值为1 属性bindResultMsg值为E001:xxx,xxx即为真正绑定者的账号信息
  • 模块处于配网模式,但模块pk与自定义App配置文件config.json所写Appid(console平台pid)不匹配,判定依据NewDeviceBean 属性bindResultCode值为1 属性bindResultMsg值为E003
  • 模块处于配网模式,已被自己账号绑定上并未删除解绑的设备,判定依据NewDeviceBean 属性bindResultCode值为1 属性bindResultMsg值为E004

四、设备控制(Android Native)

控制先决条件:用户登录成功

示例demo

错误码说明

4.1、发送控制命令

Json48透传协议:App下发数据->云端->模块->单片机

Json主控协议:App下发数据->云端->模块(含特殊外围电路直接响应)

4.1.1 SDK版本(≤1.1.2)

请求参数

key 类型及范围 说明
object Object 当前activity 例如:MainActivity.this
devTid String 设备tid
protocol JSONObject 参考协议 该协议中包含的msgID和appTid字段将由SDK自动补全
dataReceiverListener DataReceiverListener 命令发送回调
isAutoPassageway boolean false:只使用云端通道发送控制命令,true: 当前局域网内有设备时优先使用局域网通道发送控制命令(3秒未回复使用云端通道发送)局域网无设备直接使用云端通道发送控制命令

回调返回值

{
  "msgId" : 291,
  "action" : "appSendResp",
  "code" : 200,
  "desc" : "success",
  "params" : {
    "devTid" : "xxxxxxx",
    "ctrlKey" : "xxxxxxxxxx",
    "appTid" : "xxxxxxxx",
    "data" : {
      "raw" : "48xxxxx"
    }
  }
}
示例code
String command={
  'action' : 'appSend',
  'params' : {
    'devTid' :'devTid',                 
    'ctrlKey' :'xxxxxx',             
    'data' : {
      'raw':'48xxxxxxx'
    }
  }
}
MsgUtil.sendMsg(TemplateActivity.this, tid, new JSONObject(command), new DataReceiverListener() {
        @Override
        public void onReceiveSuccess(String msg) {
            //接收返回命令                        
        }

        @Override
        public void onReceiveTimeout() {
            //命令接收超时                       
        }
    },false);

4.1.2 SDK版本(≥1.1.3)

48透传数据示例:480E02010201000000000000005C 具体设计在氦氪console平台

Json主控数据示例:"{\"R\":0,\"G\":255,\"B\":89,\"W\":0,\"bright\":1,\"cmdId\":1}" 具体设计在氦氪console平台

新增如下使用方法

请求参数

key 类型及范围 说明
object Object 当前activity 例如:MainActivity.this
devTid String 设备tid
ctrlKey String 设备ctryKey
isAutoPassageway boolean isAutoPassageway为false 只使用云端通道发送控制命令,isAutoPassageway为true 当前局域网内有设备时优先使用局域网通道发送控制命令(3秒未回复使用云端通道发送)局域网无设备直接使用云端通道发送控制命令
protocolType int 数据类型 MsgUtil.PASSTHROUGH(48 透传数据)或 MsgUtil.MASTERCONTROL(Json 主控数据)
protocolContent String 48透传字符串 或 Json主控字符串
dataReceiverListener DataReceiverListener 命令发送回调

示例code

MsgUtil.sendMsg(TemplateActivity.this, deviceTid, ctrlKey, false, protocolType, protocolContent, new DataReceiverListener() {
        @Override
        public void onReceiveSuccess(String msg) {
            //接收返回命令                        
        }

        @Override
        public void onReceiveTimeout() {
            //命令接收超时                       
        }
    });

4.1.3 App返回帧错误表

App发送命令之后收到的返回帧 可能造成的原因
{"msgId":4,"action":"errorResp","code":1400006,"desc":"Field cmdId not exist"} App未按照氦氪console平台所填写的模板发送数据。
{"msgId":4,"action":"appSendResp","code":2000115,"desc":"uart timeout"} MCU未在收到模块数据后3秒内回复模块数据。
正确做法:3秒内回复数据。

MCU回复模块的数据中帧序号、帧类型是错的。
正确做法:应该和模块发的帧类型、帧序号一致。

MCU回复模块的数据中检验码出错。
正确做法:发送正确的检验码。

4.2、主动接收设备上报控制命令

设备上报数据->模块->云端->App

4.2.1 SDK版本(≤1.1.2)

请求参数

key 类型及范围 说明
object Object web控制页面对象,若控制页为Android Native编写可直接当前activity的引用 例:MainActivity.this,额外说明:标识对象 当该对象释放后将不再接收消息
filter JSONObject 过滤条件 如果某个key的值为NULL表示只检查该key是否存在
dataReceiverListener DataReceiverListener 命令接收回调接口

回调函数

void onReceiveSuccess(String msg);
void onReceiveTimeout();
| params | 说明 | | |:-------|:------------------------------|:-| | msg | 符合条件的协议 参考协议 | |

示例code

String filter={
    'action' : 'devSend',
    'params' : {
    'devTid' : 'xxxxxxx'
    }
}
MsgUtil.receiveMsg(TemplateActivity.this, new JSONObject(filter), new DataReceiverListener() {
        @Override
        public void onReceiveSuccess(String msg) {
            //设备主动上报命令                                
        }

        @Override
        public void onReceiveTimeout() {
           //暂无用处
        }
    });

4.2.2 SDK版本(≥1.1.3)

请求参数

key 类型及范围 说明
object Object web控制页面对象,若控制页为Android Native编写可直接当前activity的引用 例:MainActivity.this,额外说明:标识对象 当该对象释放后将不再接收消息
deviceTid String 设备tid
dataReceiverListener DataReceiverListener 数据接收回调接口

回调函数

void onReceiveSuccess(String msg);
void onReceiveTimeout();
| params | 说明 | | |:-------|:------------------------------|:-| | msg | 符合条件的协议 参考协议 | |

示例code

MsgUtil.receiveDevSendMsg(this, deviceTid, new DataReceiverListener() {
                @Override
                public void onReceiveSuccess(String msg) {
                    Log.i(TAG, "receive:onReceiveSuccess: " + msg);
                }

                @Override
                public void onReceiveTimeout() {

                }
            });

4.3、云端返回所有协议信息

作用:接收云端所有协议信息(例如appResp、devSend、appLoginResp等等动作信息),便于后续自行开发处理。

示例code

    import android.content.BroadcastReceiver;
    import android.content.Intent;
    import android.content.IntentFilter;

    public class DeviceCtrlActivity extends Activity{

        private MsgBroadReceiver msgBroadReceiver;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_xxx);
            createBroadcast();
        }

        /**
        * 创建广播接收器,用来接收SDK中发出的云端协议信息
        */
        private void createBroadcast() {
            msgBroadReceiver = new MsgBroadReceiver();
            IntentFilter filter = new IntentFilter();
            //只有持有相同的action的接受者才能接收此广播
            filter.addAction(ConstantsUtil.ActionStrUtil.ACTION_WS_DATA_RECEIVE);
            registerReceiver(msgBroadReceiver, filter);
        }
        class MsgBroadReceiver extends BroadcastReceiver {
            @Override
            public void onReceive(Context context, Intent intent) {
                //云端返回所有信息
                String backData=intent.getStringExtra(ConstantsUtil.HEKR_WS_PAYLOAD);
                Log.i("broadReceiver", backData);
            }
        }
        @Override
        protected void onDestroy() {
            super.onDestroy();
            if (msgBroadReceiver != null) {
                unregisterReceiver(msgBroadReceiver);
            }
        }
    }

五、设备控制(Android Web)

控制先决条件:用户登录成功、hekrsdk版本更新至1.1.2及以上版本

5.1、接入指南

    //初始化HekrJSSDK
    hekrJSSDK=HekrJSSDK.getInstance(AppCompatActivity activity, RelativeLayout layout, WebView initView, DeviceBean deviceBean, String pushJsonMessage, boolean isOpenWebCache);

    //设置webview状态监听器
    hekrJSSDK.setWebViewPageStatusListener(new HekrJSSDK.WebViewPageStatusListener{});

    //开始加载deviceBean中的控制url
    hekrJSSDK.initUrl();
参数:

key 类型及范围 说明
activity AppComapActivity web控制Activity
layout RelativeLayout web控制Activity根布局
initView WebView web控制Activity初始webView可以xml也可以new出来的
deviceBean DeviceBean hekr云端获取的设备信息对象
pushMessage String 推送消息预留入口,置空即可
isOpenWebCache boolean 是否采用webView页面缓存机制,true:首次打开该页面将自动下载控制页面zip包至手机SD卡

具体参见hekrdemo Web控制页面开发JS指南

六、云端接口

6.1、HekrUserAction接口说明

云端接口访问包括http get、post、delete、put、patch操作,请直接使用hekrUserAction操作,hekrUserAction可自动管理token,此类中封装了大量的常见接口。

示例code

import me.hekr.hummingbird.action.HekrUser;
import me.hekr.hummingbird.action.HekrUserAction;

private HekrUserAction hekrUserAction;

hekrUserAction = HekrUserAction.getInstance(context);

//3.18获取图形验证码
hekrUserAction.getImgCaptcha()
//3.19校验图形验证码
hekrUserAction.checkCaptcha()
//3.1 发送短信验证码
hekrUserAction.getVerifyCode()
//3.2 校验短信验证码
hekrUserAction.checkVerifyCode()
//3.3 使用手机号注册用户
hekrUserAction.registerByPhone()
//3.4 使用邮箱注册用户
hekrUserAction.registerByEmail()
//3.5 用户登录
hekrUserAction.login()
//3.6 重置密码
hekrUserAction.resetPwd()
//3.7 修改密码
hekrUserAction.changePassword()
//3.8 修改用户手机号
hekrUserAction.changePhoneNumber()
//3.9 发送重置密码邮件
hekrUserAction.sendResetPwdEmail()
//3.10 重新发送确认邮件
hekrUserAction.reSendVerifiedEmail()
//3.11 发送修改邮箱邮件
hekrUserAction.sendChangeEmailStep1Email()
//3.12 刷新Access Token
hekrUserAction.refresh_token()
//3.13 移动端OAuth
hekrUserAction.OAuthLogin()
//3.14 OAuth账号和主账号绑定
hekrUserAction.bindOAuth()
//3.15 解除OAuth账号和主账号的绑定关系
hekrUserAction.unbindOAuth()
//3.16 移动端使用微信第三方账号登录
hekrUserAction.weChatMOAuth()
//3.17 创建匿名Hekr主账户并与当前登录三方账户绑定
hekrUserAction.createUserAndBind()
//4.1.1 绑定设备
hekrUserAction.bindDevice()
//4.1.2 列举设备列表
hekrUserAction.getDevices()
//4.1.3 删除设备
hekrUserAction.deleteDevice()
//4.1.4 更改设备名称/描述
hekrUserAction.renameDevice()
//4.1.5 获取当前局域网内所有设备绑定状态
hekrUserAction.deviceBindStatus()
//4.1.8 查询设备属主
hekrUserAction.queryOwner()
//4.2.1 添加目录
hekrUserAction.addFolder()
//4.2.2 列举目录
hekrUserAction.getFolder()
//4.2.3 修改目录名称
hekrUserAction.renameFolder()
//4.2.4 删除目录
hekrUserAction.deleteFolder()
//4.2.5 将设备挪到指定目录
hekrUserAction.devicesPutFolder()
//4.2.6 将设备从目录挪到根目录下
hekrUserAction.folderToRoot()
//4.3.2 反向授权创建 -1.授权用户创建授权二维码
hekrUserAction.oAuthCreateCode()
//4.3.2 反向授权创建 -2.被授权用户扫描该二维码
hekrUserAction.registerAuth()
//4.3.2 反向授权创建 -3.授权用户收到被授权者的请求
hekrUserAction.getOAuthInfoRequest()
//4.3.2 反向授权创建 -4.授权用户同意
hekrUserAction.agreeOAuth()
//4.3.2 反向授权创建 -5.授权用户拒绝
hekrUserAction.refuseOAuth()
//4.3.4 取消授权
hekrUserAction.cancelOAuth()
//4.3.5 列举授权信息
hekrUserAction.getOAuthList()
//4.4.5 添加预约任务/4.4.5.1 添加一次性预约任务/4.4.5.2 添加循环预约任务
hekrUserAction.creatRule()
//4.4.6 列举预约任务
hekrUserAction.getRules()
//4.4.7 编辑预约任务
hekrUserAction.editRule()
//4.4.8 删除预约任务
hekrUserAction.deleteRules()
//4.5.1 获取用户档案
hekrUserAction.getProfile()
//4.5.2 更新用户档案
hekrUserAction.setProfile()
//4.5.16 上传文件
hekrUserAction.uploadFile()
//4.5.17 列举已上传文件
hekrUserAction.getUserFiles()
//4.5.18 删除已上传文件
hekrUserAction.deleteUserFile()
//4.5.19 绑定推送标签接口
hekrUserAction.pushTagBind()
//4.7.2 列举群组
hekrUserAction.getGroup()
//4.7.2 列举群组
hekrUserAction.renameGroup()
//4.7.3 群组改名
hekrUserAction.deleteGroup()
//5.1 判断设备模块固件是否需要升级
hekrUserAction.checkFirmwareUpdate()
//5.2 根据pid获取企业资讯
hekrUserAction.getNewsByPid()
//5.5 售后管理 - 针对设备反馈问题
hekrUserAction.feedback()
//退出登录
hekrUserAction.userLogout()
//获取登录用户UID
hekrUserAction.getUserId()
//获取缓存到本地的用户档案
hekrUserAction.getUserCache()

6.2、其他未封装的接口操作请直接使用

hekrUserAction.getHekrData()
hekrUserAction.postHekrData()
hekrUserAction.putHekrData()
hekrUserAction.deleteHekrData()
hekrUserAction.patchHekrData()
//上传文件 uri为文件路径
hekrUserAction.uploadFile(String uri)
示例code (get/post,其他方法类似)
 private HekrUserAction hekrUserAction;

 hekrUserAction = HekrUserAction.getInstance(context);

 //get
 hekrUserAction.getHekrData(url, new HekrUserAction.GetHekrDataListener() {
        @Override
        public void getSuccess(Object object) {
            //get成功
        }

        @Override
        public void getFail(int errorCode) {
            //get失败
            String errorMsg = HekrCodeUtil.errorCode2Msg(errorCode);
        }
    });

 //post entity
 hekrUserAction.postHekrData(url, entity, new HekrUserAction.GetHekrDataListener() {
        @Override
        public void getSuccess(Object object) {
            //post成功
        }

        @Override
        public void getFail(int errorCode) {
            //post失败
            String errorMsg = HekrCodeUtil.errorCode2Msg(errorCode);
        }
    });

七、消息推送

7.1、推送配置

个推平台配置指导

注:第三步资源文件及配置引入 方法一

7.2、接收推送消息示例

参见hekrdemo

八、错误码使用说明

Hekr SDK中可以直接通过errorCode获取到对应的errorMessage

String errorMsg = HekrCodeUtil.errorCode2Msg(errorCode);
| errorCode | 说明 | |:----------|:-----------------------| | 0 | 网络超时 | | 1 | Token过期,需要重新登录 | | 2 | 未知错误 |

具体错误码如下:

设备控制错误码

错误码 提示信息 中文释义 可能造成的原因
1200000 Success 调用成功
1400000 Error 未知错误 该行以下所有1400开头的错误码需要单独处理
1400001 Json parse error json解析错误 json格式错误
1400002 JWT parse error jwt_token解析错误 jwt token错误
1400003 The field {0} contains a value that is too high 属性值过高 发送报文中某属性的值超过了其上限
1400004 The field {0} contains a value that is too low 属性值过低 发送报文中某属性的值低于了其下限
1400005 The value of the field {0} must be an enumerated value 属性值必须为范围内枚举值 发送报文中某属性值不符合其定义的取值范围
1400006 Field not exist 属性不存在 发送报文中存在了未定义的属性
1400008 devTid not match 设备ID不匹配 报文填写的devTid与登录设备的devTid不一致
1400009 App repeat login APP重复登录 同一个appTid的app重复登录
1400010 User does not exist 用户不存在 用户不存在或者uid填错了
1400011 The device does not have this instruction 设备不具有该指令 设备不具备该指令
1400012 Device does not belong to user 设备不属于该用户 设备不再属于该用户
1400013 Device repeat login 设备重复登录 设备同时登录
1400014 Frame parse error 帧解析错误 报文格式或内容错误
1400015 Device last token can not use 设备上一次token已过期无法使用 使用的旧token已经超过上限
1400016 Action not support 该帧行为不被支持 报文中的action填错了
1400017 Device token can not verification 设备token校验错误 设备token错误
1400018 Device not online 设备不在线 设备离线
1400019 App is not logged in app未登录 app未登录或其他原因导致云端认为app已经离线
1400020 Device is not logged in 设备未登录 设备未登录或其他原因导致云端认为设备已经离线
1400022 The device is not found 找不到指定(devTid)设备 当前产品下不存在该设备
1400023 appTid does not match app设备id不匹配 当前发送报文的appTid与绑定设备时的appTid不一致
1400024 You report info does not match your connect server 上报节点信息与实际不符 上报的内容与当时连接节点信息不一致
1400025 RAW not valid, Please check your protocol template 协议不合法,请参照协议模板 48协议串不合法
1400026 AuthKey can't auth authKey 认证失败 填写了错误的authkey
1400027 Product key not available 不是有效的pk 填写了错误的pk
1400028 PinCode or SSID not available pinCode或者ssid无效 填写了无效的pinCode或者ssid
1400029 Bind failed due to timeout error 绑定设备超时错误 绑定设备超时
1400030 Can not bind other manufacture's device 无法绑定其它厂商的设备 APP绑定了非该厂家的设备
1400031 Can not force bind device 无法强绑设备 设备设定为无法强绑,强绑失败
1400032 Invalid Param 参数不合法 协议参数不合法
1400040 frame check sum error 帧校验失败 可能求和校验值不正确
1500000 Internal error 内部错误 服务内部错误
1500001 Link error 链路错误 链路错误

认证授权错误码

用户API错误码

错误码 提示信息 中文释义 可能造成的原因
5200000, 620000 Success 成功
5400000 Error 未知错误 该行下面的以5400、6400开头的错误码需要单独处理
5400002 App repeat login error app重复登录 同一个appTid的app重复登录
5400003 appTid can not be empty appTid不能为空 appTid不能为空
5400004 Authorization already exists 授权关系已存在 授权关系已存在
5400005 Authorization does not exist 授权关系不存在 授权关系不存在
5400006 Bind failed due to network error 因网络原因绑定失败 因网络原因绑定失败
5400007 Bind failed due to timeout error 因超时原因绑定失败 因超时原因绑定失败
5400008 Can not bind other manufacture's device 无法绑定其他厂商设备 非公版用户无法绑定非该pid设备
5400009 Modified user profile failed 修改用户档案失败 修改用户档案失败
5400010 Check verify code error 校验code失败 校验code失败
5400011 You have reached your device's authorization limits 设备授权次数达到上限 设备授权次数达到上限,无法再次授权
5400012 Bind failed due to internal error 因内部错误绑定失败 因内部错误绑定失败,一般是因为bindKey不对或者是devTid不对
5400013 Bind failed due to repeat bind 因重复绑定绑定失败 因重复绑定绑定失败
5400014 Device does not belong to user 设备不属于用户 设备不再属于该用户
5400015 No such instruction error 没有这样的指令 没有这样的指令
5400016 Device can not repeat login 设备无法重复登录 设备无法同时登录
5400017 devTid can not be empty devTid不能为空 devTid不能为空
5400018 Create timer task failed due to counts reach limit 创建定时预约次数达到上限 创建定时预约次数达到上限
5400019 Instruction expired 授权的指令已过期 授权的指令已过期
5400020 Instruction not support 不支持该指令 不支持该指令,可能是指令填错了
5400021 Invalid email token 不合法的邮件token 不合法的邮件token
5400022 Invalid old password 不合法的旧密码 不合法的旧密码
5400023 Invalid verify code 不合法的校验code 不合法的校验code
5400024 Device does not found due to internal error, please reconnect 由于内部错误设备无法找到,请重连
5400025 No such manufacture id 不存在该pid 不存在该pid
5400026 No permission to access the instruction 没有对该指令的权限 没有对该指令的权限
5400027 Template with given id does not exist 指定模板不存在 指定模板不存在
5400028 Device does not found due to incorrect status 由于内部不正确的状态导致设备无法被找到
5400035 TaskId does not exist 指定任务不存在 指定任务不存在
5400036 Can not create duplicate template 无法创建重复模板 无法创建重复模板
5400037 devTid not match 设备id 不匹配 报文填写的devTid与登录设备的devTid不一致
5400039 User does not exist 用户不存在 用户不存在
5400043 Device can not force bind 设备无法强制绑定 设备无法强制绑定
5500000 Internal error 内部错误 内部服务错误
6400001 Reverse auth template with given id does not exist 指定id的反向注册申请不存在 请求已经被同意或拒绝
6400002 Invalid reverse authorization request 不合法的反向授权请求 设备此时已经不属于该授权者;调用者不是授权者;反向授权请求id错误
6400003 Only owner can authorize 只有属主可以授权设备给其他人 非属主尝试授权设备给其他人
6400004 Device with given devTid does not exist 指定devTid的设备不存在 操作不存在的设备
6400005 Reached the maximum number of device the folder can hold 达到文件夹所能容纳设备数量的上限 达到文件夹所能容纳设备数量的上限
6400006 Can not create duplicate template folder 无法创建同名文件夹 创建同名文件夹
6400007 Folder with given id does not exist 指定id的文件夹不存在 操作不存在的文件夹
6400008 Reached the maximum number of folder the user can create 达到创建文件夹数量上限 达到创建文件夹数量上限
6400009 Can not remove root folder 无法删除根目录 删除根目录
6400010 Can not rename root folder 无法给根目录改名 给根目录改名
6400011 Rule with given id does not exist 指定的规则不存在 操作不存在的规则
6400012 Scheduler task with given id does not exist 指定的定时预约任务不存在 操作不存在的定时预约任务
6400013 Can not create duplicate rule 无法创建相同的规则 创建相同的规则
6400014 Can not create duplicate scheduler task 无法创建相同的定时预约 创建相同的定时预约
6400015 Invalid prodPubKey 不合法的产品公共秘钥 不合法的产品公共秘钥
6400016 Has no privilege do that 没有权限这样做 操作没有权限
6400017 Invalid Param {0} 参数错误 请求参数错误
6400018 Cloud storage file with given name does not exist 指定的网盘文件不存在 操作不存在的网盘文件
6400020 Can not find this infrared code 找不到这个红外码 操作不存在的红外码
6400021 Infrared code request without response 红外服务请求出错
6400022 Can not find instruction set 无法找到指令集 操作不存在的指令集
6400023 Request params not supported 参数不支持 请求参数错误
6400024 Translating Json to String failure 解析json失败
6400025 Scheduler not supported 不支持定时预约 该设备不支持定时预约功能
6500001 Delete cloud storage file failed 删除网盘文件失败 网盘操作失败
6500002 Upload cloud storage file failed 上传网盘文件失败 网盘操作失败
6500003 Server use httpClient invoke failed http网络调用失败 http调用失败

企业API错误码

错误码 提示信息 中文释义
8200000 Success 调用成功
8400000 Product does not exist 产品不存在
8400001 Protocol template does not exist 协议模板不存在
8400002 Illegal argument 非法参数
8400003 The param of platform is not illegal. The client should be Android or IOS 平台参数错误;应为Android或IOS
8400004 The pid does not exist 指定pid不存在
8400005 The h5 template does not exist h5模板不存在