Last Updated: December 19, 2018
·
122
· lazybios

electron 自动更新

检查更新 :检查是否有新版本可用,什么时候检查,有哪些方式触发检查,可以自定
通知用户 :当有更新可用的时候需要通知用户,可以检查到有更新就通知,也可以在更新文件下载好了后再通知,前者用户可以见到下载过程,后者用户感受不到下载过程
下载更新 :应用有能力下载更新,并且保证下载的完整性,可以后台下载,也可以前台下载
安装更新 :应用能唤起下载好的新版应用安装程序,然后自身退出,至于什么时候唤起安装,可以根据需要做设计

如果某次更新只是功能特性的改进、小功能的上线、普通 BUG 的修复,总之是一次让你「 情绪保持稳定 」的更新,那么这被定性为一次弱更新,我们对于这次更新的期待是,希望用户更新,但是不强制。
如果某次更新包含了杀手级功能的上线、重大 BUG 的修复、大的改版,总之是一次让你「 无法保持平静 」的更新,那么这被定性为一次强更新,我们对于强更新的期待是,强烈推荐用户更新,具有强制性。

我们把「弱更新」称为「自动更新」,对应英文「Update」,把「强更新」称为「自动升级」,对应英文「Upgrade」。

  1. 完全更新 也是基于自动更新实现考虑,我们重新设计了我们应用的安装方式,从「解压」变成「构建安装程序」(仅针对 Windows),如此我们分发应用就变成了分发安装包,我们采用的安装程序是 Inno Setup。

受启发于 Electron 官方推荐的更新方式以及 @Qquanwei 的 github(感谢这位开发者),再结合 Inno Setup 的官方资料,最终我们考虑清楚了更新的思路。

我们分发的是使用 Inno Setup 构建的应用安装包,运行即可使用 Inno Setup 提供的安装过程来安装我们的应用
我们在服务器部署了一个 json 文件,包含了我们发布的应用信息,包括每个版本的版本号、发行日期、更新概要、新版安装包下载链接
用户每次打开应用,应用会去请求这个 json 文件,对比最新的版本号和当前的版本号以检查是否有更新
下载更新就是下载最新版的应用安装包
安装更新就是唤起一个子进程运行安装包,并退出自身,安装包会处理提权的事
用户安装后,一次更新就完成了

还有一些应用中我们能看到「跳过这个版本」的选项,这其实也好实现。我们上面的「下次提醒」,本次使用期间不提醒,其实是给程序一个全局变量的标志来实现,而对于「跳过这个版本」来说,是每次打开都不再显示这个版本的更新提醒,自然我们想到数据的本地持久化。说白了,在用户的本地(或浏览器存储)中放一个标记,每次更新提醒前,去本地取出来再检查下就可以了。