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.1.3.4' api 'com.aliyun.alink.linksdk:api-client-biz:1.0.3'
混淆配置
在
proguard-rules.pro
文件中,加入以下代码,排除不需要被混淆的类和方法。-keep public class com.aliyun.iot.aep.sdk.apiclient.** { public <methods>; public <fields>; }
初始化
使用方式
请求调用
以下接口示例是根据设备端iotId查询设备的详情和绑定关系的接口,接口介绍,请参见客户端API参考>用户服务>根据设备获取绑定关系文档。
// 构建请求 Map<String, Object> maps = new HashMap<>(); maps.put("pageNo",1); maps.put("pageSize",10); IoTRequestBuilder builder = new IoTRequestBuilder() .setPath("/vision/user/bind/device/list")// 参照API文档,设置API接口描述中的Path .setScheme(Scheme.HTTPS)// 设置Scheme方式,取值范围:Scheme.HTTP或Scheme.HTTPS,默认为Scheme.HTTPS .setApiVersion("1.0.0")// 参照API文档,设置API接口的版本号 .setAuthType("iotAuth") // 当云端接口需要用户身份鉴权时需要设置该参数,反之则不需要设置 .setParams(maps); IoTRequest request = builder.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(); /** * 解析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://iot******.oss-cn-shanghai.aliyuncs.com/publish-sg/image/*****.png", "netType":"NET_WIFI", "description":"February 15, 2020 9:16:48 PM CST Add binding", "nodeType":"DEVICE", "productKey":"***", "deviceName":"***", "productName":"***", "identityAlias":"******", "iotId":"xrHAYr*********x", "owned":1, "identityId":"5053******x", "thingType":"DEVICE", "status":3 } ], "pageNo":1, "pageSize":100 }, "id":"5168fe23-***-***-962c-1f61b8bdbd2d" }
异常数据返回示例
{ "code":2064, "id":"4fa207ca-fffd-***-***-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签名或者重新上传APK生成新的安全图片。 |
203 | 未找到安全图片。 |
|
文档内容是否对您有帮助?