autoUpdater

优质
小牛编辑
133浏览
2023-12-01

使应用程序能够自动更新

进程:主进程

另见: 在应用程序中如何实现更新的详细指南.

autoUpdater是一个EventEmitter.

跨平台提醒

目前只支持 macOS 和 Windows 版本。 在 Linux 上没有内置的自动更新程序,因此建议使用发行版包管理器来更新您的应用程序。

此外,每个平台都有一些细微的差别:

macOS

在macOS上, autoUpdater模块建立在 Squirrel.Mac上,这意味着你不需要任何特殊的设置来使它工作。 对于服务器端要求, 你可以阅读 Server Support. 注意App Transport Security (ATS) 适用于所有请求作为更新过程的一部分。</0> 如需禁用ATS的应用程序可以在其应用程序的plist中添加 NSAllowsArbitraryLoads属性。

注意: 在 macOS 上,您的应用程序必须得到签名后方可自动更新。 这是 Squirrel.Mac 的要求。

Windows

在 Windows 上, 你必须将应用程序安装在用户的计算机上才能使用autoUpdater, 所以推荐使用 electron-winstaller, electron-forge 或者 grunt-electron-installer 模块来生成Windows安装程序。

当使用 electron-winstallerelectron-forge 时,请确保不要在第一次运行你的应用程序时进行更新操作(也可查看这个 issue获取更多信息)。 还建议使用 electron-squirrel-startup 来创建应用程序的桌面快捷方式。

使用Squirrel生成的安装程序将以 com.squirrel.PACKAGE_ID.YOUR_EXE_WITHOUT_DOT_EXE 的格式创建一个带有 Application User Model ID 的快捷图标,例子是 com.squirrel.slack.Slackcom.squirrel.code.Code。 你应该在自己的应用中使用 app.setAppUserModelId API 方法设置相同的 API和ID,不然 Windows 将不能正确地把你的应用固定在任务栏上。

类似 Squirrel.Mac,Windows 可以在 S3 或其他静态文件主机上托管更新。 你可以阅读 Squirrel.Windows的文档来获得更多关于 Squirrel.Windows 是如何工作的信息。

事件

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

Event: 'error'

返回:

  • error Error

当更新发生错误的时候触发。

Event: 'checking-for-update'

当开始检查更新的时候触发。

Event: 'update-available'

当有可用更新的时候触发。 更新将自动下载。

Event: 'update-not-available'

当没有可用更新的时候触发。

Event: 'update-downloaded'

返回:

  • event Event
  • releaseNotes String
  • releaseName String
  • releaseDate Date
  • updateURL String

在更新下载完成的时候触发。

在 Windows 上只有 releaseName 是有效的。

注意: 此事件并不一定需要处理。 成功下载的更新仍将在应用程序下次启动时应用。

Event: 'before-quit-for-update'

此事件是在用户调用quitAndInstall()之后发出的。

当此API被调用时,会在所有窗口关闭之前发出 before-quit 事件。 因此,如果您希望在关闭窗口进程退出之前执行操作,则应该侦听此事件,以及侦听 before-quit

方法

autoUpdater 对象具有以下方法:

autoUpdater.setFeedURL(选项)

  • 选项 对象
    • url String
    • headers Record<String, String> (可选) macOS - HTTP 请求头
    • serverType String(可选) macOS - 可以是json 或者 default,查看 Squirrel.Mac 的README文件获取更多详细信息。

设置检查更新的 url,并且初始化自动更新。

autoUpdater.getFeedURL()

返回 String - 获取当前更新的 Feed 链接.

autoUpdater.checkForUpdates()

询问服务器是否有更新。 在使用此 API 之前,您必须调用setFeedURL

注意: 若更新可用将自动下载 调用 autoUpdater.checkForUpdates() 方法两次将下载更新两次

autoUpdater.quitAndInstall()

重启应用并在下载后安装更新。 它只应在发出 update-downloaded 后方可被调用。

在此机制下,调用 autoUpdater.quitAndInstall() 将首先关闭所有应用程序窗口,并且在所有窗口都关闭之后自动调用 app.quit()

注意: 严格来讲,执行一次自动更新不一定要调用此方法。因为下载更新文件成功之后,下次应用启动的时候会强制更新。