介绍Android SDK Level 7及之前版本中各SDK的初始化。
获取Andriod安全图片
API通道SDK
在初始化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
初始化Mobile的长连接通道SDK前,请先初始化API通道SDK。
Mobile长连接通道SDK的初始化配置可以参照MobileConnectConfig,示例初始化代码如下。
//打开Log 输出
ALog.setLevel(ALog.LEVEL_DEBUG);
MobileConnectConfig config = new MobileConnectConfig();
// 设置 appKey 和 authCode(必填)
config.appkey = "{YOUR_APP_KEY}";
config.securityGuardAuthcode = "114d";
// 设置验证服务器(默认不填,SDK会自动使用“API通道SDK“的Host设定)
config.authServer = "";
// 指定长连接服务器地址。 (默认不填,SDK会使用默认的地址及端口。默认为国内华东节点。)
config.channelHost = "{长连接服务器域名}";
// 开启动态选择Host功能。 (默认false,海外环境建议设置为true。此功能前提为ChannelHost 不特殊指定。)
config.autoSelectChannelHost = false;
MobileChannel.getInstance().startConnect(context, config, new IMobileConnectListener() {
@Override
public void onConnectStateChange(MobileConnectState state) {
ALog.d(TAG,"onConnectStateChange(), state = "+state.toString());
}
});
账号及用户SDK
初始化账号及用户SDK前,请先初始化API通道SDK。
- com.aliyun.iot.aep.sdk:account为0.0.2以及以上,请使用如下代码完成初始化
OALoginAdapter adapter = new OALoginAdapter(application); //如果需要切换到海外环境,请执行下面setDefaultOAHost方法,默认为大陆环境 //adapter.setDefaultOAHost("sgp-sdk.openaccount.aliyun.com"); adapter.init("online","114d"); LoginBusiness.init(application, adapter, "online");
- com.aliyun.iot.aep.sdk:account为0.0.2以下,请使用如下代码完成初始化。
OALoginAdapter adapter = new OALoginAdapter(application); LoginBusiness.init(application,adatper,true,"online");
移动应用推送SDK
应用中注册和启动移动推送,在应用里添加初始化代码。
PushManager.getInstance().init(app, "114d"); // app => application
创建消息接收Receiver,继承自com.alibaba.sdk.android.push.MessageReceiver
,并在对应回调中添加业务处理逻辑,可参考以下代码。
public class MyMessageReceiver extends MessageReceiver {
// 消息接收部分的LOG_TAG
public static final String REC_TAG = "receiver";
@Override
public void onNotification(Context context, String title, String summary, Map<String, String> extraMap) {
// TODO 处理推送通知
Log.e("MyMessageReceiver", "Receive notification, title: " + title + ", summary: " + summary + ", extraMap: " + extraMap);
}
@Override
public void onMessage(Context context, CPushMessage cPushMessage) {
Log.e("MyMessageReceiver", "onMessage, messageId: " + cPushMessage.getMessageId() + ", title: " + cPushMessage.getTitle() + ", content:" + cPushMessage.getContent());
}
@Override
public void onNotificationOpened(Context context, String title, String summary, String extraMap) {
Log.e("MyMessageReceiver", "onNotificationOpened, title: " + title + ", summary: " + summary + ", extraMap:" + extraMap);
}
@Override
protected void onNotificationClickedWithNoAction(Context context, String title, String summary, String extraMap) {
Log.e("MyMessageReceiver", "onNotificationClickedWithNoAction, title: " + title + ", summary: " + summary + ", extraMap:" + extraMap);
}
@Override
protected void onNotificationReceivedInApp(Context context, String title, String summary, Map<String, String> extraMap, int openType, String openActivity, String openUrl) {
Log.e("MyMessageReceiver", "onNotificationReceivedInApp, title: " + title + ", summary: " + summary + ", extraMap:" + extraMap + ", openType:" + openType + ", openActivity:" + openActivity + ", openUrl:" + openUrl);
}
@Override
protected void onNotificationRemoved(Context context, String messageId) {
Log.e("MyMessageReceiver", "onNotificationRemoved");
}
}
将该receiver添加到AndroidManifest.xml中。
<!-- 消息接收监听器 (用户可自主扩展) -->
<receiver
android:name=".MyMessageReceiver"
android:exported="false"> <!-- 为保证receiver安全,建议设置不可导出,如需对其他应用开放可通过android:permission进行限制 -->
<intent-filter>
<action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" />
</intent-filter>
<intent-filter>
<action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" />
</intent-filter>
<intent-filter>
<action android:name="com.alibaba.sdk.android.push.RECEIVE" />
</intent-filter>
</receiver>
当接收到服务器下发的消息时,会触发onNotification方法。
初始化正常,方法callback.onSuccess()
则会被回调。以上文接入代码为例,logcat将会打印以下日志。
11-24 12:55:51.096 15235-15535/com.alibaba.xxxx D/YourApp﹕ init cloudchannel success
确认cloudchannel初始化正常,在logcat日志中输入 awcn关键字。
11-24 12:53:51.036 15235-15556/com.alibaba.xxxx E/awcn﹕ |[seq:AWCN1_1] AUTH httpStatusCode: 200
11-24 12:53:51.036 15235-15556/com.alibaba.xxxx E/awcn﹕ |[seq:AWCN1_1] status:AUTH_SUCC
在初始化成功后使用cloudPushService.getDeviceId()
获取DeviceId,如果能够成功获取,则DeviceId获取正常。
BoneMobile 容器SDK
初始化Mobile长连接通道SDK前,请先初始化API通道SDK。
在Application.onCreate函数中,添加如下初始化代码。
String serverEnv = "production"; //仅支持production,即生产环境 String pluginEnv = "release"; //仅支持release String language = "zh-CN"; //语言环境,目前支持多种语言 // 初始化 BoneMobile RN 容器 InitializationHelper.initialize(application, pluginEnv, serverEnv,language);
身份认证SDK
初始化身份认证SDK前,请先完成API通道SDK、账号及用户SDK的初始化。
- SDK(com.aliyun.iot.aep.sdk:iot-credential)版本小于0.0.1.7,请使用如下方式初始化
//其中loginAdapter为OLoginAdapter,务必注意在调用之前,保证loginAdapter已经完成初始化,即完成了用户和账号SDK的初始化 IoTCredentialManageImpl.init(loginAdapter, appkey);
- SDK(com.aliyun.iot.aep.sdk:iot-credential)版本为0.0.1.7及以上,请使用如下方式初始化
//务必注意在调用之前,保证完成了用户和账号SDK的初始化 IoTCredentialManageImpl.init(appKey);
配网SDK
配网SDK自身不涉及初始化,但配网SDK依赖API通道SDK和账号SDK,因此需要完成API通道和账号的初始化才能使用。
物模型SDK
此功能模块依赖API通道SDK,以及长连接通道SDK。使用前请先完成这两个SDK的初始化。
SDK初始化调用如下代码。
TmpSdk.init(getBaseContext(), new TmpInitConfig(TmpInitConfig.ONLINE));
在初始化之后需要调用发现接口发现本地设备。在网络情况发生变化时同样需要调用该接口。网络情况发生变化包括切换连接的路由器,从WiFi切换到4G网络等。
TmpSdk.getDeviceManager().discoverDevices(null,5000,null);