Saltar al contenido principal

Actualización de aplicaciones

Hay varias maneras de proporcionar actualizaciones automáticas a tu aplicación de Electron. La manera más fácil y apoyada oficialmente es aprovechar el marco de trabajo incorporado Squirrel y el módulo autoUpdater de Electron.

Usando update.electronjs.org

El equipo de Electron mantiene update.electronjs.org, un webservice gratis y open-source que las aplicaciones Electron puede usar para auto-actualizarse. El servicio está diseñado para aplicaciones de Electron que cumplen con los siguientes criterios:

  • Aplicaciones que se ejecuten en macOS o Windows
  • La Aplicación tiene un repositorio público en GitHub
  • Todas las compilaciones se publicarán en GitHub Releases
  • Todas las compilaciones tienen verificación de código

La forma más fácil de usar este servicio es instalando update-electron-app, un módulo de Node.js preconfigurado para usarse con update.electronjs.org.

Instale el módulo usando su gestor de paquetes Node.js de su elección:

npm install update-electron-app

Y entonces, llame a updater desde su archivo principal de ejecución:

main.js
require('update-electron-app')()

De manera predeterminada, este módulo verificará si existen actualizaciones en el inicio de la aplicación y luego cada diez minutos. Cuando se encuentra una actualización, esta se descargará automáticamente en segundo plano. Cuando se completa la descarga, se muestra un cuadro de diálogo que le permite al usuario reiniciar su aplicación.

Si necesita personalizar su configuración, puedes pasar opciones a update-electron-app o usa el servicio de actualización directamente.

Usando otros servicios de actualización

Si está desarrollando una aplicación privada de Electrón, o si no está publicando lanzamientos en GitHub, tal vez pueda considerar poseer su propio servidor de actualizaciones.

Paso 1: Desplegando un servidor de actualizaciones

Dependiendo de sus necesidades, puede escoger una de esta:

  • Hazel – Servidor de actualizaciones para aplicaciones privadas o de código abierto que pueden ser desplegadas de forma gratuita mediante Vercel. Es tomado de los Lanzamientos de GitHub y aprovecha al maximo el poder de las CDN's de GitHub.
  • Nuts – También usa los Lanzamientos de GitHub, pero almacena la aplicación, actualiza en el Disco Duro y también soporta repositorios privados.
  • electron-release-server – proporciona un panel para administrar los lanzamientos y no es necesarios que los lanzamientos se originen desde GitHub.
  • Nucleus – Un servidor de actualizaciones completo para aplicaciones de Electrón y es mantenido gracias a Atlassian. Soporta múltiples aplicaciones y canales, y utiliza un almacén de archivos estáticos para minimizar el coste del servidor.

Una vez que hayas desplegado tu servidor de actualizaciones, puedes instrumentar tu código de aplicación para recibir y aplicar las actualizaciones con el módulo autoUpdater de Electron.

Paso 2: Recibiendo actualizaciones en tu aplicación

Primero, importe los módulos requeridos en su código principal. El siguiente código podría variar para diferentes software para servidores, pero funciona como se describe cuando se utiliza Hazel.

Compruebe su entorno de ejecución!

Por favor, asegúrese de que el código de abajo sólo se ejecutará en su aplicación empaquetada, y no en desarrollo. Puede utilizar la API app.isPackaged para comprobar el entorno de ejecución.

main.js
const { app, autoUpdater, dialog } = require('electron')

A continuación, construya la URL mediante uno de los servidor de actualizaciones y llame a autoUpdater con ello:

main.js
const server = 'https://your-deployment-url.com'
const url = `${server}/update/${process.platform}/${app.getVersion()}`

autoUpdater.setFeedURL({ url })

Como este paso final, compruebe si hay actualizaciones. El siguiente ejemplo comprobará cada minuto:

main.js
setInterval(() => {
autoUpdater.checkForUpdates()
}, 60000)

Una vez que tu aplicación esté empaquetada, recibirá una actualización por cada nuevo GitHub Release que publiques.

Paso 3: Notificar a los usuarios cuando haya actualizaciones disponibles

Ahora que ha configurado el mecanismo de actualización básico para su aplicación, debe asegurarse de que el usuario reciba una notificación cuando haya una actualización. Esto se puede lograr utilizando los eventos de autoUpdater API:

main.js
autoUpdater.on('update-downloaded', (event, releaseNotes, releaseName) => {
const dialogOpts = {
type: 'info',
buttons: ['Restart', 'Later'],
title: 'Application Update',
message: process.platform === 'win32' ? releaseNotes : releaseName,
detail:
'Una nueva versión ha sido descargada. Restart the application to apply the updates.'
}

dialog.showMessageBox(dialogOpts).then((returnValue) => {
if (returnValue.response === 0) autoUpdater.quitAndInstall()
})
})

También asegúrese de que se estén manejando los errores. Aquí hay un ejemplo para registrarlos en stderr:

main.js
autoUpdater.on('error', (message) => {
console.error('There was a problem updating the application')
console.error(message)
})
Administrando actualizaciones manualmente

Debido a que las peticiones realizadas por autoUpdate no están bajo su control directo, puede encontrar situaciones que son difíciles de manejar (como si el servidor de actualizaciones cuenta con sistema de autenticación). El campo de la url soporta el protocolo file://, lo que significa que con un poco de esfuerzo, puede evitar el aspecto del proceso de comunicación con el servidor cargando su actualización desde un directorio local. Aquí hay un ejemplo de cómo podría funcionar esto.