API通道SDK是IoT官方服务的API通道。API通道基于HTTPS协议,并通过整合安全组件来提升通道的安全性。集成该SDK后,可以通过调用SDK的请求接口,完成对生活物联网平台云端接口的调用。
引入方式
Maven仓库
maven { url "http://maven.aliyun.com/nexus/content/repositories/releases/" }
gradle依赖
api 'com.aliyun.iot.aep.sdk:apiclient:0.0.9.1' api 'com.aliyun.alink.linksdk:api-client-biz:1.0.1'
混淆配置
在proguard-rules.pro文件中,加入以下代码,排除不需要被混淆的类和方法。
-keep public class com.aliyun.iot.aep.sdk.apiclient.** { public <methods>; public <fields>; }
初始化
初始化的操作请参见SDK初始化。
使用方式
请求调用
以下接口示例是根据设备端iotId查询设备的详情和绑定关系的接口,云端介绍请参见根据设备获取绑定关系。
// 构建请求 Map<String, Object> params = new HashMap<>(); params.put("pageNo", 1); params.put("pageSize", 100); // iotId获取当前账号绑定设备列表的时候可以拿到,对应唯一设备 params.put("iotId", "xxxx); IoTRequest request = new IoTRequestBuilder() .setScheme(Scheme.HTTPS) // 设置Scheme方式,取值范围:Scheme.HTTP或Scheme.HTTPS,默认为Scheme.HTTPS .setPath("uc/listBindingByDev") // 参照API文档,设置API接口描述中的Path,本示例为uc/listBindingByDev .setApiVersion("1.0.2") // 参照API文档,设置API接口的版本号,本示例为1.0.2 .authType("iotAuth") // 当云端接口需要用户身份鉴权时需要设置该参数,反之则不需要设置 .addParam("input", "测试") // 参照API文档,设置API接口的参数,也可以使用.setParams(Map<Strign,Object> params)来设置 .build(); // 获取Client实例,并发送请求 IoTAPIClient ioTAPIClient = new IoTAPIClientFactory().getClient(); ioTAPIClient.send(request, new IoTCallback() { @Override public void onFailure(IoTRequest request, Exception e) { // TODO根据e,处理异常 } @Override public void onResponse(IoTRequest request, IoTResponse response) { int code = response.getCode(); // 200 代表成功 if(200 != code){ //失败示例,参见 "异常数据返回示例" String mesage = response.getMessage(); String localizedMsg = response.getLocalizedMsg(); //TODO,根据mesage和localizedMsg,处理失败信息 return; } Object data = response.getData(); //TODO,可以将data转成一个本地的对象或者直接使用JSONObject进行数据解析 /** * 解析data,data示例参见"正常数据返回示例" * 以下解析示例采用fastjson针对"正常数据返回示例",解析各个数据节点 */ if (data == null) { return; } JSONObject jsonObject = JSON.parseObject(data.toString()); //获取业务层code String codeBiz = jsonObject.getString("code"); //获取业务返回的数据 JSONObject dataBizJsonObject = jsonObject.getJSONObject("data"); //获取data,data数据是一个JSONArray,即设备列表 JSONArray devListJsonArray = dataBizJsonObject.getJSONArray("data"); //后续具体设备信息,则是对devListJsonArray进行一个遍历解析了 if (devListJsonArray != null) { for (int i = 0; i < devListJsonArray.size(); i++) { JSONObject devJsonObject = devListJsonArray.getJSONObject(i); // TODO 从 devJsonObject 解析出各个字段 } } } });
正常数据返回示例
{ "code":200, "data":{ "total":1, "data":[ { "productModel":"X1", "gmtModified":1581772608000, "categoryImage":"http://iotx-paas-admin.oss-cn-shanghai.aliyuncs.com/publish-sg/image/xxxx.png", "netType":"NET_WIFI", "description":"February 15, 2020 9:16:48 PM CST Add binding", "nodeType":"DEVICE", "productKey":"xxx", "deviceName":"xxxx", "productName":"xxxx", "identityAlias":"xxxxxx", "iotId":"xrHAYrQDFSEpexxxx", "owned":1, "identityId":"5053ope232f4xxxx", "thingType":"DEVICE", "status":3 } ], "pageNo":1, "pageSize":100 }, "id":"5168fe23-xxx-xxx-962c-1f61b8bdbd2d" }
异常数据返回示例
{ "code":2064, "id":"4fa207ca-fffd-xxxx-xxxx-e6f7ca6c99c3", "localizedMsg":"请求错误", "message":"need authorize to bind" }
添加日志
API通道SDK本身没有输出任何请求日志(从性能和安全性的角度考虑)。您在开发过程中,可以选择以下任一方式来打印日志。
自行添加Tracker。
使用内置的LogTracker(如以下代码所示)。
在初始化中,传入
debug=true
。初始化后调用
IoTSmart.setDebug(true)
打开SDK调试日志开关。
IoTAPIClientImpl.getInstance().registerTracker(new Tracker() {
@Override
public void onSend(IoTRequest ioTRequest) {
// 收到上层接口请求,请求发送前触发
}
@Override
public void onFailure(IoTRequest ioTRequest, Exception e) {
// 请求失败时触发
}
@Override
public void onResponse(IoTRequest ioTRequest, IoTResponse ioTResponse) {
// 请求成功时触发
}
@Override
public void onRealSend(IoTRequestWrapper ioTRequestWrapper) {
// 上层接口发送之后触发
}
@Override
public void onRawFailure(IoTRequestWrapper ioTRequestWrapper, Exception e) {
// API 网关 SDK 接口请求失败时触发
}
@Override
public void onRawResponse(IoTRequestWrapper ioTRequestWrapper, IoTResponse ioTResponse) {
// API 网关 SDK 接口响应成功时触发
}
});
常见错误
错误码列表包含了初始化常见的一些错误,可以在logcat中看到如下异常信息。其它业务相关接口错误码、含义及解决方式请参见 常见问题。
错误码 | 含义 | 解决方法 |
103 | 安全组件so加载失败 | 过滤掉x86架构 |
202 | 安全图片与当前apk的签名不匹配导致的 | 修改当前apk签名 |
203 | 未找到安全图片 |
|
文档内容是否对您有帮助?