文档

API通道SDK

更新时间:
一键部署

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>;
    }

初始化

初始化前需确保已正确集成安全图片。具体操作,请参见SDK初始化集成安全图片

使用方式

  • 请求调用

    以下接口示例是根据设备端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

未找到安全图片。

  • 检查安全图片是否存在或者AuthCode是否正确。

  • 是否开启资源优化导致。

  • 是否启用instant run导致无法加载。