1. 什么是自动更新?
自动更新是在点击打开安装过的客户端时,自动检测客户端版本号来决定是否存在最新版本需要更新,在实际项目开发中,我们推荐使用自动更新方式来更新版本,这样有利于版本更有效的维护。客户端自动更新界面样式:
2. 自动更新配置项位置?
在version.json中我们可以配置版本信息,以electron版本为例:
- 开发阶段:存放路径为config/electron/version.json
- 打包路径:resources/app.unpacked/version.json
注:优先检测全量版本号
version.json参数介绍
| 配置项 | 说明 |
|---|---|
| appVersion | 全量包版本号 |
| frameVersion | 增量包版本号 |
3. 如何做到自动更新?
我们这里拿更新electron版本为例:
- 首先我们需要在开发项目根目录中找到文件config/electron/version.json维护版本号以及config/electron/init.json维护配置(在init中需要增加checkUpdateUrl为远程更新地址);
- 配置维护完成以后需要把项目代码以及依赖模块打包成exe模式,详细请参考项目打包;
- 项目打包成exe模式以后,需要根据加密客户端/命令生成唯一的hash码,详细请参考hash码生成;
- 生成唯一的hash码以后,需要更改自动更新包中update.json文件中的版本号appVersion/frameVersion(增量/全量)(此版本号需要与开发项目目录config/electron/version.json一致)、把对应的hash复制到appSign/frameSign(增量/全量);把打包好的exe替换到自动更新包中的appVersion/frameVersion(增量/全量)中,
- 编写更新说明添加到自动更新包下changelog.txt文件中,最后把更改好的自动更新包上传到服务端地址的相关文件中;
以上是自动更新的规范流程,下面我们将详细介绍:
- 如何区分增量更新还是全量更新
- 自动更新包文件结构
- update.json文件配置
4. 如何区分增量/全量更新?
当第一次安装客户端时候,需要提供全量更新版本,后续要更新版依真实情况而定需要全量还是增量更新,如果只更新业务代码我们建议采用增量更新,如果涉及更新框架依赖时,我们建议采用全量更新方式。
- 增量:当只需要更新业务代码不需要更新框架依赖建议采用增量更新方式。增量更新方式需要对应更改项目下的config/electron/version.json文件跟自动更新包update.json中的appVersion配置;
- 全量:当需要更新依赖框架时建议采用全量更新方式,全量更新需要对应更改项目下的config/electron/version.json文件跟自动更新包update.json中的frameVersion配置;
文件介绍
| 文件名 | 说明 |
|---|---|
| appVersion | 用来存放增量包的文件夹,里面存放增量exe文件 |
| frameVersion | 用来存放全量包的文件夹,里面存放全量exe文件 |
| changelog.txt | 自动更新日志,更新版本的内容需要写到此txt中 |
| update.json | 自动更新配置文件 |
- version //【自动更新文件夹,名称可以自己定义,文件下的存放exe版本的文件目录也可自己定义】* appVersion //【用来存放增量包的文件夹】- ResourceSetup.exe //【增量包exe文件】* frameVersion //【用来存放全量包的文件夹】- Setup.exe //【全量包exe文件】* changelog.txt //【自动更新日志,更新版本的内容需要写到此txt中】* update.json //【自动更新配置文件】
参数介绍
| 参数 | 说明 |
|---|---|
| appVersion | 增量包所对应的版本号,需要与项目中version.json中的增量版本号对应 |
| frameVersion | 全量包所对应的版本号,需要与项目中version.json中的全量版本号对应 |
| appUpdateUrl | 增量包下载地址 |
| frameUpdateUrl | 全量包下载地址 |
| appSign | 增量包文件MD5加密码 由MOCK工具生成 |
| frameSign | 全量包文件MD5加密码 由MOCK工具生成 |
| forceUpdate | 是否强制更新 |
| more | 自动更新的提示内容;包含updateTime(更新时间)和changelog(更新提示的内容)属性 |
注:如果不想强制更新只需要配置forceUpdate为false即可。
update.json示例:
{"windows": {"appVersion": "0.0.1","frameVersion": "0.0.1","appUpdateUrl": "http://****/**/ResourceSetup.exe","frameUpdateUrl": "http://****/**/Setup.exe","appSign":"e3681da227e879fecc3e0b071a8787b0","frameSign":"8c89e13fd3bbfed0c485c429d9a617d1","forceUpdate":false,"more":{"updateTime":"2018-2-6","changelog":"http://****/**/changelog.txt"}}}
5. FAQ 如何排查自动更新无效?
当按照上述自动更新配置完成但无效时,可以从以下方面入手:
- 检查在项目根目录config/electron/init.json中是否配置了更新地址checkUpdateUrl字段;
- 检查是否把更新文件包替换到远程服务端,以及文件目录是否正确;
- 检查是否可以访问到远程服务端的exe下载文件;
- 检查是否将最新打包好的exe文件替换到更新包中对应的文件夹中;
- 检查update.json中的版本号跟项目中的config/electron/version.json中的版本号是否一致,如果不一致则有问题;如果一致在检查跟当前客户端的是否一致,如果一致则有问题;
- 检查hash码是否正确,保持唯一性;可以重新生成再尝试;
