-
Notifications
You must be signed in to change notification settings - Fork 27
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 类的 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 机制来限制不同用户的数据访问权限,从源头降低安全风险,更多细节请参考数据和安全指南。