本文介绍:自动更新应用

autoUpdater模块为Squirrel框架提供了一个接口。

进程: 主进程

您可以使用这些项目之一进行快速启动多平台发布服务器以分发应用程序:

  • nuts:为您的应用程序使用智能版本服务器,使用GitHub作为后端。使用Squirrel(Mac和Windows)自动更新
  • electron-release-server:功能齐全,自主托管的electron应用程序的发布服务器,兼容自动更新器
  • squirrel-updates-server:简单的node.js服务器为Squirrel.Mac和Squirrel.Windows使用GitHub版本
  • squirrel-release-server:简单的Squirrel.Windows的PHP应用程序,它从文件夹读取更新。支持增量更新。

平台相关的提示

虽然 autoUpdater 模块提供了一套各平台通用的接口,但是在每个平台间依然会有一些微小的差异。

macOS

在macOS上,autoUpdater模块建立在Squirrel.Mac上,这意味着你不需要任何特殊的设置来使它工作。

对于服务器端要求,您可以阅读 Server Support.

注意App传输安全(ATS)适用于所有请求作为更新过程的一部分。

如需禁用ATS的应用程序可以在其应用程序的plist中添加 NSAllowsArbitraryLoads键。

注意:您的应用程序必须在macOS上进行自动更新。这是Squirrel.Mac的要求。

Windows

在 Windows 上,你必须使用安装程序将你的应用装到用户的计算机上,所以比较推荐的方法是用 electron-winstaller, electron-buildergrunt-electron-installer 模块来生成Windows安装程序。

当使用electron-winstallerelectron-winstaller, electron-builder时,确保你不要尝试更新你的应用程序第一次运行(另见这个问题的更多信息)。还建议使用electron-squirrel-startup获取应用程序的桌面快捷方式。

使用Squirrel生成的安装程序将以 com.squirrel.PACKAGE_ID.YOUR_EXE_WITHOUT_DOT_EXE的格式创建一个带有Application User Model ID的快捷图标,例子是 com.squirrel.slack.Slack'和com.squirrel.code.Code`。

您应确保程序具有 app.setAppUserModelId API且ID相同,否则Windows将无法在应用程式的工作列中正确匹配您的应用程序。

服务器端设置也不同于macOS。您可以阅读Squirrel.Windows的文档以获得更多详细信息。

Linux

在Linux上没有自动更新器的内置支持,因此建议使用分发包的包管理器来更新您的应用程序。

事件列表

autoUpdater 对象会触发以下的事件:

事件:’error’

触发:更新发生错误时

  • error Error

事件:’checking-for-update’

触发:开始检查更新时

事件:’update-available’

触发:发现一个可用更新时

事件:’update-not-available’

触发:没有可用更新时

事件:’update-downloaded’

触发:更新下载完成时

  • event Event
  • releaseNotes String - 新版本更新公告
  • releaseName String - 新的版本号
  • releaseDate Date - 新版本发布的日期
  • updateURL String - 更新地址

在 Windows 上只有 releaseName 是有效的。

方法列表

autoUpdater 对象有以下的方法:

autoUpdater.setFeedURL(url)

用途:设置 url并初始化自动更新器

  • url String
  • requestHeaders Object macOS (可选) - HTTP请求标头.

autoUpdater.getFeedURL()

用途:获得当前更新的Feed链接

返回 String

autoUpdater.checkForUpdates()

用途:询问服务器是否有更新

在调用这个方法之前,必须要先调用 setFeedURL

autoUpdater.quitAndInstall()

用途:重新启动应用程序,并在更新已下载后安装

该方法只有在 update-downloaded被释放后才被调用。

注意项: autoUpdater.quitAndInstall()和普通退出有所区别,它将先关闭所有应用程序窗口,然后在 app上发出 before-quit事件。