-
Notifications
You must be signed in to change notification settings - Fork 28
5.IntegrationAndroidSecurely
LeanCloud Android SDK 从 6.1.0 版本开始,除了支持通过 appId + appKey 完成初始化,还提供一种更加安全的使用方式,支持仅仅通过 appId 来初始化应用,避免核心配置信息在客户端泄漏可能带来的潜在风险。
下面我们来详细说明新版本的新集成方式。
在开发应用前,开发者需要到 LeanCloud 官网注册账号并创建应用,这些基本的流程我们在此略过。
Android 开发者在使用 LeanCloud 服务前必须将签名证书的指纹配置到应用后台,为此需要根据应用打包采用的签名证书在本地生成签名证书指纹。
这需要满足以下 2 个条件:
- 已创建应用程序的签名文件,签名证书创建可参考生成签名证书。
- 当前开发机器已经安装 JDK。
具体操作步骤如下:
- 打开命令行工具,执行命令
keytool -list -v -keystore <keystore-file>
其中 为应用签名文件的完整路径,注意按命令行提示进行操作。 - 获取对应的 SHA256 指纹,例如。
- 登录 LeanCloud 控制台,选择目标应用。
- 进入「设置 - 安全中心」,在「Android 安全设置」项下,填入应用包名和前一步获得的 SHA256 指纹。
- 点击保存按钮将信息保存到云端。
推荐大家使用包依赖管理工具来安装 SDK,可以参考原文档:SDK 安装指南。 修改当前项目的 build.gradle 文件,加入如下依赖:
implementation ('cn.leancloud:storage-android:{current-version}@aar'){
exclude group: 'com.alibaba', module: 'fastjson'
exclude group: 'org.ligboy.retrofit2', module: 'converter-fastjson'
}
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'com.alibaba:fastjson:1.1.71.android'
implementation 'org.ligboy.retrofit2:converter-fastjson-android:2.1.0'
新的认证方式,在客户端需要配合 LeanCloud native library 来进行请求签名。
请点击这里下载 JNI library,将下载文件在本地解压,可以得到如下文件:
jniLibs
├── arm64-v8a
│ └── libleancloud-core.so
├── armeabi
│ └── libleancloud-core.so
├── armeabi-v7a
│ └── libleancloud-core.so
├── mips
│ └── libleancloud-core.so
├── mips64
│ └── libleancloud-core.so
├── x86
│ └── libleancloud-core.so
└── x86_64
└── libleancloud-core.so
将解压之后的 jniLibs 目录,拷贝到应用的 src/main
目录下,项目代码结构如下:
src/
└── main
├── AndroidManifest.xml
├── assets
├── java
├── jniLibs
│ ├── arm64-v8a
│ │ └── libleancloud-core.so
│ ├── armeabi
│ │ └── libleancloud-core.so
│ ├── armeabi-v7a
│ │ └── libleancloud-core.so
│ ├── mips
│ │ └── libleancloud-core.so
│ ├── mips64
│ │ └── libleancloud-core.so
│ ├── x86
│ │ └── libleancloud-core.so
│ └── x86_64
│ └── libleancloud-core.so
└── res
注意:我们提供的 native library 是支持所有 Android 设备的,你也可以根据自己的需求删掉不必要的指令集文件,这样可以进一步减小安装包的体积。
与之前的版本不同,新的 SDK 支持只使用 appId 来完成初始化。
首先,需要修改一下 application 的 build.gradle 文件,以支持自动签名:
android {
compileSdkVersion 29
buildToolsVersion "29.0.2"
defaultConfig {
applicationId "xxxx"
minSdkVersion 21
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
// 增加自动签名的内容
signingConfigs {
config {
keyAlias '{your key alias}'
keyPassword '{your key password}'
storeFile file('{your store file full name}')
storePassword '{your store password}'
}
}
buildTypes {
debug {
// 增加签名设置
signingConfig signingConfigs.config
}
release {
// 增加签名设置
signingConfig signingConfigs.config
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
然后向 Application 类的 onCreate 方法添加初始化代码:
import cn.leancloud.AVOSCloud;
public class MyLeanCloudApp extends Application {
@Override
public void onCreate() {
super.onCreate();
// 提供 this、App ID、Server Host 作为参数
AVOSCloud.initializeSecurely(this, "{{appId}}", "https://xxx.example.com");
}
}
至此,客户端的所有改动已经完成,开发者可以如以往一样调用 LeanCloud 服务了。
新的 Android SDK 会使用新的安全方式进行请求签名,与 LeanCloud 云端完成数据交互。
如果开发者没有在客户端直接调用云引擎中的云函数,那么所有的集成都已经完成了,可以忽略本章内容。
如果您有在 Android 客户端调用过云函数(例如代码里有 AVCloud#callFunctionInBackground
或 AVCloud#callRPCInBackground
请求),为了保证 SDK 发出的请求能被云引擎正确处理,您还需要升级云引擎的 runtime 库并重新部署云引擎实例。
现在支持 Android SDK 新认证方式的云引擎 runtime SDK 版本如下:
- Python SDK:2.2.1 and later
- Node.js SDK:3.4.1 and later
- Java SDK(engine-core):6.1.0 and later
- PHP SDK:0.11.1 and later
大家更新云引擎代码依赖的版本,通过 lean publish
进行发布即可。
如果您当前使用的 runtime SDK 版本满足要求,那么只需要对云引擎实例进行重新发布即可。
新的使用方式只是去掉了 appKey 在客户端的使用,在一定程度上避免了暴露应用核心配置信息,它无法保证绝对的数据安全。我们还是推荐大家通过 ACL 机制来限制不同用户的数据访问权限,从源头降低安全风险,更多细节请参考数据和安全指南。
可以的。如果不使用新的初始化方式,还是可以按以前的方式来使用新版本 SDK 的,并且也不需要在工程中加入 native library。
多半是因为工程中没有加入 native library 导致的,请回看 2.2 一节。
所有请求都出现 401 的错误,多半是因为打包的 apk (debug 运行也一样)没有正确配置签名证书导致的,请回看 2.3 节。
可以的。设置了 package name 和证书指纹之后,只是为应用增加了一种新的认证方式,并不影响老的认证方式的继续使用。
目前我们只支持为一个平台的 app 配置一套包名和证书指纹,会对应到某一种 apk。如果开发者在多个客户端应用中共享同一个平台 app 数据,那么可以选择其中某一个客户端使用新的认证方式,而其他客户端还是使用老的方式,在 Android 平台上多种认证方式是可以共存的。