您好,欢迎来到网暖!

当前位置:网暖 » 站长资讯 » 建站基础 » 网络技术 » 文章详细 订阅RssFeed

大话Electron应用自动更新

来源:网络整理 浏览:305次 时间:2020-09-24

大话Electron应用自动更新

一、Windows下更新特有的问题

软件更新在Linux和macOS还好说,但是在Windows上可能会遇到UAC问题,常用的方法是:Windows计划任务、Windows Service,本质上这两种方式还是提权,Windows Service 与 Windows计划任务相比最大的特点就是可以与应用交互,Windows的更新就是使用Windows Update服务,即使在macOS的Edge浏览器也是使用的Microsoft Update服务。

二、手动更新

手动更新是下载完整的安装包,用户手动安装,如果数据需要保存在本地,那么不要将数据保存在应用安装目录,而是用户目录。

手动更新适合用户粘性高,非频繁更新的应用,在macOS的App Store中,通常只要上传安装包,用户终端可以自动更新。手动更新一般会有比较大的安装包,因为是完全下载。一般作为降级更新方案使用。

三、覆盖更新

程序自动替换,下载更新过程快,只需要重启应用,甚至不需要重启,但是容易出现写入文件失败,而且实现复杂,适合打补丁。

四、自动更新

应用程序自动下载,再次启动以后重新加载最新版本即可,一般这样的应用结构是由一个固定的应用启动程序读取不同的应用版本。

这样更新速度快,异步更新并且适合高频更新的应用。缺点就是实现有一定的难度。

五、Electron应用更新(1)Web化

将业务视图存放到远程HTTPS服务器,这样对用户端无感知,但是导致应用无法离线使用,而且还要实现一堆框架兼容新问题,比如Electron的desktopCapture模块。

(2)官方自动更新

基于Squirrel框架完成自动更新,并且解决了权限问题。

(3)Updater

是Electron官方更新的改版实现,有electron-builder提供。

  • 支持Windows签名验证
  • 支持进度条
  • 基于electron-builder非常容易使用
  • 没有内置的Windows更新体验好
  • 在Windows上依旧存在权限问题

启动时会调用更新器,然后一键安装,等待更新完成后重启。

六、增量更新

只更新不同的地方,因此只提供差异包即可,体积视修改面积决定,常见的更新方案如下:

  • bsdiff、bspatch:在移动端很常用,适用于二进制文件,开源、免费
  • Xdelta3:适用于二进制
  • Courgette:Google提出的更新方案,是bsdiff和bspatch的优化
  • RTPatch:是商业方案
七、客户端灰度发布

控制发布风险,根据用户标签或者客户端特征进行,发布时出现用户体验问题进行回滚。

八、Electron更新服务器

Electron提供了几个更新服务器方案:

  • Hazel – 用于私人或开源应用的更新服务器,可以在 Now 上免费部署。 它从GitHub Releases中拉取更新文件,并且利用 GitHub CDN 的强大性能。
  • Nuts-同样使用GitHub Releases, 但得在磁盘上缓存应用程序更新并支持私有存储库.
  • electron-release-server – 提供一个用于处理发布的仪表板,并且不需要在GitHub上发布发布。
  • Nucleus – 一个由Atlassian维护的 Electron 应用程序的完整更新服务器。 支持多种应用程序和渠道; 使用静态文件存储来降低服务器成本.

但是最大的问题就是无法定制更新,因此我们可以自己实现更新服务。在更新方案中,客户端使用autoUpdater模块,但是Windows上依旧会存在一些问题,比如初次启动无法更新,Windows的更新一般是静态存储,可以将更新包存放到对象存储服务中,比如AWS S3。

autoUpdater是一个EventEmitter,提供一系列的事件,比如更细可用,更新下载完成等等。

Electron更新一直存在的问题:

  • 文档覆盖不全面
  • 包体积太大
  • 没有进度条
(1)macOS更新

响应内容:

{  "url": "https://example.com/update/release/name-version-platform.zip",    "name": "My release name",    "notes": "Update Text",    "pub_date": "2020年 4月 1日 星期三 20时23分02秒 CST"}

响应状态码:

  • 204:没有内容,表示不需要更新

测试macOS下更新:

“钥匙串访问”-“证书访问”-“证书助理”-“创建证书”,选择自签名证书。创建完成后,双击证书,安装。

客户端代码逻辑:

const {autoUpdater} = require('electron');autoUpdater.setFeedUrl('https://example.com/update/release/name-version-platform.zip');autoUpdater.checkForUpdate(); // 检查更新autoUpdater.quitAndInstall();      // 退出并安装更新

可以监听的事件:update-avliable、update-downloaded、error。

可以通过dialog模块通知用户是否更新:

dialog.showMessageBox();   // 显示信息dialog.showOpenDialog();     // 打开对话框dialog.showSaveDialog();      // 保存对话框
(2)Windows更新

响应内容:

包签名 name-version-full.nupkg Hash值

安装更新库:

sudo npm i electron-squirrel-startup --save

在打包Windows的时候,会创建3个文件:

  • 安装包
  • 更新包
  • RELEASE,该文件就是更新服务器的响应体

推荐站点

  • 腾讯腾讯

    腾讯网(www.QQ.com)是中国浏览量最大的中文门户网站,是腾讯公司推出的集新闻信息、互动社区、娱乐产品和基础服务为一体的大型综合门户网站。腾讯网服务于全球华人用户,致力成为最具传播力和互动性,权威、主流、时尚的互联网媒体平台。通过强大的实时新闻和全面深入的信息资讯服务,为中国数以亿计的互联网用户提供富有创意的网上新生活。

    www.qq.com
  • 搜狐搜狐

    搜狐网是全球最大的中文门户网站,为用户提供24小时不间断的最新资讯,及搜索、邮件等网络服务。内容包括全球热点事件、突发新闻、时事评论、热播影视剧、体育赛事、行业动态、生活服务信息,以及论坛、博客、微博、我的搜狐等互动空间。

    www.sohu.com
  • 网易网易

    网易是中国领先的互联网技术公司,为用户提供免费邮箱、游戏、搜索引擎服务,开设新闻、娱乐、体育等30多个内容频道,及博客、视频、论坛等互动交流,网聚人的力量。

    www.163.com
  • 新浪新浪

    新浪网为全球用户24小时提供全面及时的中文资讯,内容覆盖国内外突发新闻事件、体坛赛事、娱乐时尚、产业资讯、实用信息等,设有新闻、体育、娱乐、财经、科技、房产、汽车等30多个内容频道,同时开设博客、视频、论坛等自由互动交流空间。

    www.sina.com.cn
  • 百度一下百度一下

    百度一下,你就知道

    www.baidu.com