阅读(767) (0)

Electron 自动更新功能autoUpdater

2017-08-27 12:03:38 更新

autoUpdater 

启用应用程序自动更新。

过程: main

autoUpdater模块为Squirrel框架提供了一个界面。

您可以通过使用以下任一项目快速启动多平台发布服务器来分发应用程序:

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

不同平台差异

虽然autoUpdater为不同的平台提供了一个统一的API,但每个平台上仍然存在一些微妙的差异。

MACOS 

在macOS上, autoUpdater模块基于 Squirrel.Mac ,这意味着您不需要任何特殊的设置来使其工作。 对于服务器端要求,您可以阅读服务器支持 。 请注意, 应用程序传输安全性 (ATS)适用于作为更新过程一部分的所有请求。 需要禁用ATS的应用程序可以将NSAllowsArbitraryLoads键添加到其应用程序的plist中。

注意:您的应用程序必须签名才能自动更新macOS。 这是Squirrel.Mac的要求。


windows


在Windows上,您必须先将自己的应用程序安装到用户的机器中,然后才能使用autoUpdater ,因此建议您使用electronic-winstaller ,  electron-forgegrunt-electron-installer软件包来生成Windows安装程序。

当使用electronic-winstaller电子伪造时,请确保您第一次运行时不尝试更新应用程序(另请参阅 此问题以获取更多信息 )。 还建议您使用电子松鼠启动来获取您的应用程序的桌面快捷方式。

使用 Squirrel 生成的安装程序将以com.squirrel.PACKAGE_ID.YOUR_EXE_WITHOUT_DOT_EXE的格式创建一个应用程序用户模型ID的快捷方式图标,示例为com.squirrel.slack.Slack和com.squirrel.code.Code 。 您必须使用app.setAppUserModelId API为您的应用使用相同的ID,否则Windows将无法在任务栏中正确引导您的应用。

与Squirrel.Mac不同,Windows可以在S3或任何其他静态文件主机上托管更新。 您可以阅读Squirrel.Windows的文档,以获取有关Squirrel.Windows如何工作的更多详细信息。

Linux

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


Events

autoUpdater对象发出以下事件:

事件:'错误' 

返回:

  • error错误

更新时发生错误时发出。

事件:'检查更新' 

检查更新是否已启动时发出。

事件:'更新可用' 

当有可用更新时发出。 更新将自动下载。

事件:'update-not-available' 

当没有可用更新时发出。

事件:'更新下载' 

返回:

  • event事件
  • releaseNotes字符串
  • releaseName字符串
  • releaseDate Date
  • updateURL String

下载更新时发出。

在Windows上,只有releaseName可用。

方法 

autoUpdater对象具有以下方法:

autoUpdater.setFeedURL(url[, requestHeaders]) 

  • url String
  • requestHeaders对象macOS (可选) - HTTP请求头。

设置url并初始化自动更新程序。

autoUpdater.getFeedURL() 

返回String - 当前的更新Feed URL。

autoUpdater.checkForUpdates() 

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

autoUpdater.quitAndInstall() 

重新启动应用程序,并在安装更新后下载。 只有在update-downloaded后才应该调用它。

注意: autoUpdater.quitAndInstall()将首先关闭所有应用程序窗口,然后才在app之后发出before-quit事件。 这与正常退出事件序列不同。