环境搭建
一、概述
本文主要介绍在集成绿米SDK前,需要在您的项目中添加的一些配置,以及获取SDK初始化必要的参数
二、前提条件
- 确保您已经完成准备工作
- 确保您已经安装了Android Studio并配置了JDK、Android SDK等开发环境,详情介绍请前往Android 开发者官网
三、添加依赖
3.1 编译环境需求
支持版本
参数 | 版本号 | 描述 |
---|---|---|
minSdkVersion | 21 | Android 5 |
targetSdkVersion | 33 | Android 13 |
3.2 打开Android Studio
3.3 编辑根目录
下的build.gradle
注意:maven仓库的访问需要账户、密码,需要联系商务获取
buildscript {
repositories {
google()
jcenter()
maven { url 'https://jitpack.io' }
//绿米maven仓库
maven {
url 'https://public-maven.aqara.com/repository/lumi-release/'
credentials {
username = 'maven_username'
password = 'maven_password'
}
}
}
dependencies {
classpath "com.android.tools.build:gradle:4.1.3"
//绿米Android初始化插件
classpath 'com.lumi.plugin:module-init:2.0.1'
}
}
allprojects {
repositories {
google()
jcenter()
maven { url 'https://jitpack.io' }
maven {
url 'https://public-maven.aqara.com/repository/lumi-release/'
credentials {
username = 'maven_username'
password = 'maven_password'
}
}
}
}
3.4 编辑app
目录下的build.gradle
plugins {
id 'com.android.application'
}
//绿米统一初始化插件
apply plugin: 'lumi-module-init'
android {
}
dependencies {
//绿米统一初始化依赖,注意使用最新版本
implementation 'com.lumi.external:core:2.1.9'
}
3.5 AndroidX 支持
在gradle.properties
中添加对AndroidX的支持
android.useAndroidX=true
android.enableJetifier=true
3.6 权限声明
四、初始化
4.1 获取SDK初始化必要的参数
4.1.1 AppId、AppKey获取
参见文档准备工作
4.1.2 其他必要参数获取
根据不同的账户授权方式,获取方式也不一致,详情请参考授权管理
通常来讲,大部份时候都是使用虚拟账户授权模式,即第三方App需要请求自身云平台获取相关的参数:
4.2 SDK初始化
集成绿米Android端各个业务SDK,通常情况下仅需通过LumiCoreManager
进行统一初始化即可,其他业务SDK通常情况下不需要单独进行初始化。
4.2.1 进行统一初始化
初始化接口调用
final LumiCoreManager.LumiCoreSDKConfig config =
new LumiCoreManager.LumiCoreSDKConfig.Companion.Builder()
.baseUrl("host")
.baseH5Url("h5Url")
.baseImageUrl("imageUrl")
.appId("appId")
.appKey("appKey")
.clientId("clientId")
.sdkChannel("sdkChannel")
.userInfo(new ILumiUserInfo() {
@Nullable
@Override
public String getUserId() {
return "userId";
}
@Nullable
@Override
public String getUserToken() {
return "userToken";
}
@NonNull
@Override
public String getArea() {
return "area";
}
@NonNull
@Override
public String getLanguage() {
return "language";
}
@NonNull
@Override
public String getSupportDeviceArea() {
return "supportDeviceArea";
}
})
.build();
//true表示打开调试日志,false反之
//注意:init方法调用多次无效,如果需要在后续更新参数,请调用update方法
LumiCoreManager.Companion.getInstance().init(this, true, config);
参数说明
字段 | 数据类型 | 说明 | 获取渠道 |
---|---|---|---|
appId | String | App唯一标识 | Aqara开发者平台 |
appKey | String | App唯一标识 | Aqara开发者平台 |
clientId | String | App推送唯一标识 | 接口获取,详情请查看Aqara开发者平台 |
baseUrl | String | SDK请求的域名 | 接口获取,详情请查看Aqara开发者平台 |
baseH5Url | String | SDK请求的H5链接 | 接口获取,详情请查看Aqara开发者平台 |
baseImageUrl | String | SDK请求的图片cdn地址 | 接口获取,详情请查看Aqara开发者平台 |
sdkChannel | String | 渠道标识 | 项目标识,影响部分业务逻辑处理,填写项目名称即可 |
userId | String | 用户唯一标识 | 接口获取,详情请查看Aqara开发者平台 |
userToken | String | 用户访问令牌 | 接口获取,详情请查看Aqara开发者平台 |
area | String | App 所在地区 | 默认值为CN |
language | String | App 当前语言 | 默认值为zh |
supportDeviceArea | String | 设备入网的地区 | 默认值CHN |
注意:area和supportDeviceArea,部分地区代号存在差异
language取值
language参数会影响SDK及云端返回到多语言类型
取值 | 描述 | 说明 |
---|---|---|
zh | 简体中文 | 默认值 |
zh_TW | 台湾繁体 | / |
zh_HK | 香港繁体 | / |
en | 英文 | / |
ko | 韩文 | / |
ru | 俄文 | / |
de | 德文 | / |
it | 意大利文 | / |
fr | 法文 | / |
es | 西班牙文 | / |
注意:该值仅影响动态化获取信息的多语言,例如云端接口、配置文件等,SDK本身使用到的多语言(存放在strings.xml中)则跟随宿主App的多语言。
area取值
area参数会影响云端接口的业务逻辑,在某些地区下可能存在部分业务不可用。
取值 | 描述 | 说明 |
---|---|---|
CN | 中国大陆 | 默认值 |
HMT | 中国香港、澳门、台湾 | / |
US | 美国 | / |
EU | 欧洲 | / |
RU | 俄罗斯 | / |
SEA | 东南亚 | / |
KR | 韩国 | / |
JP | 日本 | / |
AU | 意大利 | / |
ME | 中东 | / |
AF | 非洲 | / |
OTHER | 其他地区 | / |
supportDeviceArea取值
supportDeviceArea参数会影响设备入网配置。(部分设备仅能在特定地区进行激活使用)
取值 | 描述 | 说明 |
---|---|---|
CHN | 中国大陆 | 默认值 |
HMT | 中国香港、澳门、台湾 | / |
USA | 美国 | / |
EU | 欧洲 | / |
RUS | 俄罗斯 | / |
SEA | 东南亚 | / |
KR | 韩国 | / |
JP | 日本 | / |
AU | 意大利 | / |
ME | 中东 | / |
AF | 非洲 | / |
OTHER | 其他地区 | / |
4.2.2 更新用户信息
如果需要切换用户,或者Token失效了,需要重新请求接口获取,详情请查看Aqara开发者平台,并且更新SDK的用户信息
更新用户信息接口调用
LumiCoreManager.Companion.getInstance()
.updateUserConfig(new ILumiUserInfo() {
@Nullable
@Override
public String getUserId() {
return "userId";
}
@Nullable
@Override
public String getUserToken() {
return "userToken";
}
@NonNull
@Override
public String getArea() {
return "area";
}
@NonNull
@Override
public String getLanguage() {
return "lang";
}
@NonNull
@Override
public String getSupportDeviceArea() {
return "area";
}
});
五、推送
SDK本身不具备获取云端推送的能力,需要依赖宿主App的推送。详情请查看消息推送
5.1 订阅推送
LumiCoreManager.getInstance().rePushClientId("clientId")
参数说明
字段 | 数据类型 | 说明 | 获取渠道 | 示例 |
---|---|---|---|---|
clientId | String | App推送唯一标识 | 接口获取,详情请查看Aqara开发者平台 | HOST+随机字符串(64位以内,建议HOST拼接SDK初始化获取的token来使用) |
5.2 转发推送
第三方App收到关于Aqara设备的推送时,可以将其转发给SDK
LumiCorePushManager.getInstance().onMessage("content")
注意不要将一整个消息体透传给SDK,SDK仅需要LUMI@开头的字符串
参数说明
字段 | 数据类型 | 说明 | 获取渠道 |
---|---|---|---|
content | String | 推送消息 | App自身获取 |
5.3 推送消息格式
将content
传递给SDK即可
{
"sequenceNo": "202106031107",
"osType": "android",
"content": "LUMI@eyJ0eXBlIjoicmVzX3N1YnNjcmliZSIsInJlc3VsdCI6eyJ0aW1lU3RhbXAiOjE2MjMwNjUwNjA5NzYsImF0dHJDaGFubmVsIjoxLCJzb3VyY2UiOiI0LCwxNjIzMDY1MDYwNzgxLDlmMzgyMTIwNjczMTI0ZDI5N2VmNjI0MV9lOTE3ZjE0MDBhNTIyNDk1LjU0NTU4MTgyNTk4MDg5MTEzNywsIiwiYXR0ciI6IjE0LjcuODUiLCJ2YWx1ZSI6IjEyOTE4MTExNTIiLCJzdWJqZWN0SWQiOiJsdW1pMS41NGVmNDRjOTExNjUiLCJpZGVudGlmeUlkIjoiSE9TVDA0YTZkYzAzNzMyNTM3NTBiMzIyMzMxOGVhMGQ1ZmVhMjk0YSIsInB1c2hUeXBlIjoicmVzX3N1YnNjcmliZSJ9LCJjb2RlIjowfQ==",
"token": "04a6dc0373253750b3223318ea0d5fea294a"
}