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

初始化

在初始化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);
			

安全图片未正确集成的时候,会导致安全组件初始化失败。

使用方式

请参考如下示例,使用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
                ...
            }
        });
			

混淆配置

proguard-rules.pro文件中,加入以下代码,排除不需要被混淆的类和方法。

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

添加日志

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

impl.registerTracker(new Tracker());

APIGatewaySDKDelegate.apiEnv = Env.RELEASE; //初始化中config.apiEnv的值
APIGatewaySDKDelegate.host =”api.link.aliyun.com"; //初始化中config.host的值
			

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, 100));
说明 此处设置的超时时间不可以超过初始化中设置的全局超时时间,否则以全局超时时间为准。超时时间最小为1s。

国际化

指定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",印地语"hi-IN",意大利语"it-IT",十种语言