一、目标
梳理软件更新功能涉及到的数据,以保证数据安全性。
二、体验地址
神马笔记最新版本下载:【神马笔记 版本2.1.0——软件更新功能.apk】
三、实现方案
1. 版本信息
- VersionEntry
| 名称 | 类型 | 说明 | 示例 |
|---|---|---|---|
| title | string | 软件标题 | 神马笔记 |
| name | string | 版本名称 | 2.1 |
| developer | string | 开发者名称 | Amoy Inc. |
| size | long | 安装包大小,字节数 | 3210782 |
| brief | string | 概要介绍,markdown格式 | |
| detail | string | 详细介绍,markdown格式 | |
| *code | int | 版本号 | 26 |
| *checksum | string | 校验码 | |
| *source | string | 下载地址 |
需要注意的是,没有*号字段仅用于向用户显示,不会参与业务逻辑。
带*号字段,code,checksum,source这3个字段参与软件更新的业务逻辑。一旦发现3个字段发生变化,将触发重新下载安装包文件。
2. 更新信息
- UpdateEntry
| 名称 | 类型 | 说明 | 示例 |
|---|---|---|---|
| downloadId | string | 下载任务ID | |
| downloadCode | string | 下载的版本号 | 26 |
| downloadChecksum | string | 下载的校验码 | |
| daily | string | 检查更新的时间 | 2019-04-08 |
| version | VersionEntry | 版本信息 |
UpdateEntry用于记录软件更新的用户操作数据,以支持整个更新流程。
3. 下载信息
- DownloadEntry
| 名称 | 类型 | 说明 | 示例 |
|---|---|---|---|
| id | string | 唯一标识符 | |
| source | string | HTTP源地址,远程 | |
| destination | string | File目标地址,本地 | |
| length | long | 文件大小,将第一次响应的ContentLength作为文件大小。 注意跟VersionEntry#size的含义不同 |
- DownloadTable
| 名称 | 类型 | 说明 | 示例 |
|---|---|---|---|
| list | List<DownloadEntry> |
DownloadEntry和DownloadTable用于支持文件下载功能。
与UpdateEntry#downloadId配合,可以查询到下载的源地址及目标地址。
4. 配置信息
- ConfigEntry
| 名称 | 类型 | 说明 | 示例 |
|---|---|---|---|
| debug | boolean | 是否开启调试模式 | false |
| baseUrl | string | 服务接口的基地址 |
ConfigEntry为只读数据,用户无关。
是为了调试应用的特定功能而设计,例如:
发布新版本信息时,必须在测试环境下进行测试,保证一切稳定后,才会发布到正式环境中。
通过配置ConfigEntry,可以在不改动代码的情况下,切换测试与正式环境。
四、组合起来
首先,读取ConfigEntry应用配置信息,
其次,用户进入软件更新界面时,请求VersionEntry,
服务返回版本信息后,保存到UpdateEntry中,
用户下载安装包时,创建DownloadEntry,并将相关信息保存到UpdateEntry中。
五、Finally
~自在飞花轻似梦~无边丝雨细如愁~