Atualizando Aplicativos
Existem várias maneiras de fornecer atualizações automáticas para seu aplicativo Electron. A maneira mais fácil, suportada oficialmente é utilizando o framework embutido Squirrel e o módulo autoUpdater do Electron.
Using update.electronjs.org
A equipe do Electron mantém update.electronjs.org, um webservice gratuito e de código aberto que os aplicativos Electron podem usar para se auto-atualizar. O serviço é destinado para apps Electron que atendem os seguintes critérios:
- O app roda no macOS ou no Windows
- O app tem um repositório GitHub público
- Builds são publicadas em GitHub Releases
- Builds são code-signed
A forma mais fácil de usar este serviço é instalando o update-electron-app, um módulo Node.js pre-configurado para ser usado com update.electronjs.org.
Instale o módulo usando seu gerenciador de pacotes Node.js de preferência:
- npm
- Yarn
- pnpm
npm install update-electron-app
yarn add update-electron-app
pnpm add update-electron-app
Em seguida, importe o pacote do atualizador no arquivo principal do projeto:
require('update-electron-app')()
Por padrão, este módulo irá verificar atualizações na inicialização do aplicativo, e a cada dez minutos. Quando uma atualização for encontrada, ela será baixada automaticamente em segundo plano. Quando o download é concluído, uma caixa de diálogo será exibida permitindo que o usuário reinicie o aplicativo.
Se precisar personalizar sua configuração, você pode passar argumentos para o update-electron-app ou usar o serviço de atualização diretamente.
Usando outros serviços de atualização
Se você estiver desenvolvendo um aplicativo Electron privado, ou se não é publicado versões no GitHub Releases, pode ser necessário executar o seu próprio servidor de atualização.
Passo 1: Implementando um servidor de atualização
Dependendo de suas necessidades, você pode escolher um destes:
- Hazel – Servidor de Atualização para aplicativos privados ou de código aberto que podem ser implantados gratuitamente na Vercel. Ele puxa do GitHub Releases e utiliza o poder dos GitHub CDN.
- Nuts - Também usar GitHub Releases, mas armazena em cache as atualizações do app no disco e suporta repositórios.
- electron-resease-server - Fornece um painel para a manipulação de versões e não requer lançamentos que se originam do GitHub.
- Nucleus - Um servidor de atualização completo para Electron apps mantido pela Atlassian. Suporta múltiplas aplicações e canais; usar um armazenamento de arquivo estático para diminuir o custo do servidor.
Dado que você fez implementar no seu servidor de atualizações, você pode modificar o código do seu 'app' para receber e aplicar as atualizações com o módulo [AutoUpdater] do Electron.
Passo 2: Recebendo atualizações no seu 'app'
Primeiro, importe os módulos necessários no arquivo principal do projeto. O código a seguir pode variar para diferentes softwares de servidor, mas ele funciona como descrito ao usar o Hazel.
Por favor, certifique-se de que o código abaixo será executado apenas no seu aplicativo empacotado, e não em desenvolvimento. Você pode usar a API app.isPackaged para verificar o ambiente.
const { app, autoUpdater, dialog } = require('electron')
Em seguida, construa a URL do feed do servidor de atualização e informe ao autoUpdater sobre ele:
const server = 'https://your-deployment-url.com'
const url = `${server}/update/${process.platform}/${app.getVersion()}`
autoUpdater.setFeedURL({ url })
Como etapa final, verifique se há atualizações. O exemplo abaixo irá verificar a cada minuto:
setInterval(() => {
autoUpdater.checkForUpdates()
}, 60000)
Once your application is packaged, it will receive an update for each new GitHub Release that you publish.
Passo 3: Notificando os usuários quando atualizações estiverem disponíveis
Agora que você configurou um Sistema de Atualização básico para sua aplicação, você precisa garantir que o usuário será notificado quando houver uma atualização. Isto pode ser realizado usando os eventos da API do AutoUpdater:
autoUpdater.on('update-downloaded', (event, releaseNotes, releaseName) => {
const dialogOpts = {
type: 'info',
buttons: ['Reiniciar', 'Mais Tarde'],
title: 'Atualização Disponivel',
message: process.platform === 'win32' ? releaseNotes : releaseName,
detail:
'Uma nova versão foi Baixada. Restart the application to apply the updates.'
}
dialog.showMessageBox(dialogOpts).then((returnValue) => {
if (returnValue.response === 0) autoUpdater.quitAndInstall()
})
})
Certifique-se também de que os erros estão sendo tratados. Segue um exemplo como debugar e enviar para o stderr
:
autoUpdater.on('error', (message) => {
console.error('Ocorreu um erro ao atualizar o aplicativo')
console.error(message)
})
Como as solicitações feitas pelo autoUpdate não estão sob seu controle direto, você pode encontrar situações difíceis ao manusear (como caso o servidor de atualização estiver por trás de uma autenticação). O campo url
suporta o protocolo file://
, o que significa que, com algum esforço, você pode evitar o aspecto de comunicação do servidor do processo, enviando sua atualização a partir de um diretório local. Aqui está um exemplo de como isso pode funcionar.