Android 开发文档¶
注意:该版本的SDK已经不再维护,新接入用户请集成 V2.0 SDK¶
概述¶
App 开发之前请先申请相关账号:
- 申请第三方平台登录账号目前支持 QQ,微信,微博,Google,Twitter,Facebook
- 申请个推账号
- 申请Hekr平台企业账号,并完善相关信息
开发准备¶
使用SDK开发之前请务必通读本文档
集成准备¶
1、下载SDK配置文件¶
2、快速导入SDK¶
-
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()
//使用邮箱注册
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"
}
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;
}
}
}
}
注意:移动端第三方登录中微博登录需要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)¶
控制先决条件:用户登录成功
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"
}
}
}
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、主动接收设备上报控制命令¶
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();
示例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();
示例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卡 |
六、云端接口¶
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)
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、接收推送消息示例¶
八、错误码使用说明¶
Hekr SDK中可以直接通过errorCode获取到对应的errorMessage
String errorMsg = HekrCodeUtil.errorCode2Msg(errorCode);
具体错误码如下:
设备控制错误码¶
错误码 | 提示信息 | 中文释义 | 可能造成的原因 |
---|---|---|---|
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绑定了非该厂家的设备 |
1400039 | Device license can not verification | 设备license不合法 | 请填写正确的license |
1400031 | Can not force bind device | 无法强绑设备 | 设备设定为无法强绑,强绑失败 |
1400032 | Invalid Param | 参数不合法 | 协议参数不合法 |
1400040 | frame payload 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 | 用户不存在 | 用户不存在 |
5400045 | 短码或者短码密码错误 | ||
5400046 | 短码不足(系统错误) | ||
5400047 | 无权修改其他用户绑定设备 | ||
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模板不存在 |
8400028 | 产品类型错误,目前只支持48产品 | |
8400030 | 未找到设备长短码信息 | |
8400029 | 权限错误,无权查看该设备信息 | |
8400031 | 缺少配额 |