API 通道 SDK

更新时间:2019-05-24 10:23:45

概述

API 通道 SDK 是 IoT 官方服务的 API 通道。 API 通道 基于 HTTP 协议,并通过整合安全组件来提升通道的安全性。

初始化

在初始化 SDK 前,需要正确的配置安全图片,请参见:集成安全图片
然后参考下面的示例代码初始化 SDK:

// 初始化无线保镖
        try {
            SecurityInit.Initialize(app);
        } catch (JAQException ex) {
            Log.e(TAG, "security-sdk-initialize-failed");
        } catch (Exception ex) {
            Log.e(TAG, "security-sdk-initialize-failed");
        }

        // 初始化 IoTAPIClient
        IoTAPIClientImpl.InitializeConfig config = new IoTAPIClientImpl.InitializeConfig();
        // 国内环境
        config.host = "api.link.aliyun.com"; 
        // 海外环境,请参考如下设置
        //config.host = “api-iot.ap-southeast-1.aliyuncs.com”;
        config.apiEnv = Env.RELEASE; //只支持RELEASE
        //设置请求超时(可选)默认超时时间10s
        config.connectTimeout=10_000L;
        config.readTimeout=10_000L;
        config.writeTimeout=10_000L;

        IoTAPIClientImpl impl = IoTAPIClientImpl.getInstance();
        impl.init(app, config);

安全图片未正确集成的时候,会导致安全组件初始化失败。常见的失败情形,请参见常见问题 FAQ

关于 IoTAPIClientImpl 的说明,请参见:IoTAPIClientImpl;

使用方式

请参考如下示例,使用 SDK:

// 构建请求
        IoTRequest request = new IoTRequestBuilder()
                .setScheme(scheme) // 如果是HTTPS,可以省略本设置
                .setHost(host) // 如果是IoT官方服务,可以省略本设置
                .setPath("/kit/debug/ping") // 参考业务API文档,设置path
                .setApiVersion("1.0.0")  // 参考业务API文档,设置apiVersion
                .addParam("input", "测试") // 参考业务API文档,设置params,也可使用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) {
                // 根据 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();
                    // 根据 mesage 和 localizedMsg,处理失败信息
                    ...

                    return;
                }

                Object data = response.getData();
                // 解析 data
                ...
            }
        });

混淆配置


-keep public class com.aliyun.iot.aep.sdk.apiclient.** {
    public <methods>;
    public <fields>;
}

更多功能

添加日志

API 通道 SDK 本身没有输出任何请求日志(从性能和安全性的角度考虑)。如果开发者在开发过程中,需要添加相关日志,可以自行添加 Tracker,打印相关日志,也可以使用内置的LogTracker来打印日志。详情可以参考 DemoApp 源码 和IoTAPICLientImpl.registerTracker()

JSON解析

如要对响应数据做JSON 解析,可以用 com.aliyun.iot.aep.sdk.apiclient.callback.IoTJsonCallback 来包装IoTCallback;如

ioTAPIClient.send(request, new IoTJsonCallback(ioTCallback, Demno.class));

主线程回调

如要在主线程回调结果,可以用 com.aliyun.iot.aep.sdk.apiclient.callback.IoTUIThreadCallback 来包装IoTCallback;如

ioTAPIClient.send(request, new IoTUIThreadCallback(ioTCallback));

请求超时设置

如果要对该次请求设置超时时间,可以用 com.aliyun.iot.aep.sdk.apiclient.callback.IoTTimeOutCallback 来包装IoTCallback;如

ioTAPIClient.send(request, new IoTTimeOutCallback(ioTCallback, 1000));

注意:考虑到实际业务场景,超时时间不能超过全局设置的超时时间,否则以全局超时时间为准;且最小为1s

身份认证

如果调用的 API 需要校验用户身份,请参见身份认证 SDK;

国际化支持

指定 API 请求的语言,服务器将根据指定的语言进行响应报文填充,如指定语言为 "zh-CN",则 response.localizedMsg 将会返回中文。

IoTAPIClientImpl.getInstance().setLanguage("zh-CN"); // 全局配置,设置后立即起效
 //当前支持 中文“zh-CN”, 英文"en-US",法文"fr-FR",德文"de-DE",日文"ja-JP",韩文"ko-KR",西班牙文"es-ES",俄文"ru-RU",八种语言

results matching ""

    No results matching ""