1. 什么是自动更新?

自动更新是在点击打开安装过的客户端时,自动检测客户端版本号来决定是否存在最新版本需要更新,在实际项目开发中,我们推荐使用自动更新方式来更新版本,这样有利于版本更有效的维护。客户端自动更新界面样式:
image.png

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 自动更新配置文件
  1. - version //【自动更新文件夹,名称可以自己定义,文件下的存放exe版本的文件目录也可自己定义】
  2. * appVersion //【用来存放增量包的文件夹】
  3. - ResourceSetup.exe //【增量包exe文件】
  4. * frameVersion //【用来存放全量包的文件夹】
  5. - Setup.exe //【全量包exe文件】
  6. * changelog.txt //【自动更新日志,更新版本的内容需要写到此txt中】
  7. * update.json //【自动更新配置文件】

update.json文件配置:

参数介绍
参数 说明
appVersion 增量包所对应的版本号,需要与项目中version.json中的增量版本号对应
frameVersion 全量包所对应的版本号,需要与项目中version.json中的全量版本号对应
appUpdateUrl 增量包下载地址
frameUpdateUrl 全量包下载地址
appSign 增量包文件MD5加密码 由MOCK工具生成
frameSign 全量包文件MD5加密码 由MOCK工具生成
forceUpdate 是否强制更新
more 自动更新的提示内容;包含updateTime(更新时间)和changelog(更新提示的内容)属性

注:如果不想强制更新只需要配置forceUpdate为false即可。

update.json示例:

  1. {
  2. "windows": {
  3. "appVersion": "0.0.1",
  4. "frameVersion": "0.0.1",
  5. "appUpdateUrl": "http://****/**/ResourceSetup.exe",
  6. "frameUpdateUrl": "http://****/**/Setup.exe",
  7. "appSign":"e3681da227e879fecc3e0b071a8787b0",
  8. "frameSign":"8c89e13fd3bbfed0c485c429d9a617d1",
  9. "forceUpdate":false,
  10. "more":{
  11. "updateTime":"2018-2-6",
  12. "changelog":"http://****/**/changelog.txt"
  13. }
  14. }
  15. }

5. FAQ 如何排查自动更新无效?

当按照上述自动更新配置完成但无效时,可以从以下方面入手:

  • 检查在项目根目录config/electron/init.json中是否配置了更新地址checkUpdateUrl字段;
  • 检查是否把更新文件包替换到远程服务端,以及文件目录是否正确;
  • 检查是否可以访问到远程服务端的exe下载文件;
  • 检查是否将最新打包好的exe文件替换到更新包中对应的文件夹中;
  • 检查update.json中的版本号跟项目中的config/electron/version.json中的版本号是否一致,如果不一致则有问题;如果一致在检查跟当前客户端的是否一致,如果一致则有问题;
  • 检查hash码是否正确,保持唯一性;可以重新生成再尝试;