API 通道 SDK
更新时间:2018-06-27 16:41:57
概述
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.apiEnv = Env.RELEASE;
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.getMesasge();
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,打印相关日志。详情可以参考 DemoApp 源码 和IoTAPICLientImpl.registerTracker()
身份认证
如果调用的 API 需要校验用户身份,请参见身份认证 SDK;
国际化支持
指定 API 请求的语言,服务器将根据指定的语言进行响应报文填充,如指定语言为 "zh-CN",则 response.localizedMsg 将会返回中文。
IoTAPIClientImpl.getInstance().setLanguage("zh-CN"); // 全局配置,设置后立即起效
// 当前仅支持 “zh-CN”, "en-US" 两个选项