Publicado: 14 de febrero de 2020
Muchos navegadores te permiten habilitar y promover la instalación de tu app web progresiva (PWA) directamente desde su interfaz de usuario. La instalación (antes conocida como Agregar a la pantalla principal) permite que los usuarios agreguen tu AWP a sus dispositivos móviles o de escritorio. Instalar una PWA la agrega al selector del usuario, por lo que puede ejecutarse como cualquier otra app instalada.
Además de la experiencia de instalación proporcionada por el navegador, puedes proporcionar tu propio flujo de instalación personalizado directamente en tu app.

Cuando consideres si promocionar la instalación, ten en cuenta cómo suelen usar tu AWP los usuarios. Por ejemplo, si hay un conjunto de usuarios que usan tu PWA varias veces a la semana, estos usuarios podrían beneficiarse de la comodidad adicional de iniciar tu app desde la pantalla principal de un teléfono o desde el menú Inicio en un sistema operativo de escritorio. Algunas aplicaciones de productividad y entretenimiento también se benefician del espacio adicional en la pantalla que se crea cuando se quitan las barras de herramientas del navegador de la ventana en los modos standalone
, minimal-ui
o window-control-overlay
instalados.
Requisitos previos
Antes de comenzar, asegúrate de que tu PWA cumpla con los requisitos de instalación, que suelen incluir un manifiesto de la app web.
Promueve la instalación
Para mostrar que tu app web progresiva se puede instalar y proporcionar un flujo de instalación personalizado en la app, haz lo siguiente:
- Detecta el evento
beforeinstallprompt
. - Guarda el evento
beforeinstallprompt
para que pueda activar el flujo de instalación más adelante. - Alerta al usuario que tu PWA se puede instalar y proporciona un botón o algún otro elemento para iniciar el flujo de instalación integrado en la app.
Detecta el evento beforeinstallprompt
Si tu app web progresiva cumple con los criterios de instalación requeridos, el navegador activará un evento beforeinstallprompt
. Guarda una referencia al evento y actualiza la interfaz de usuario para indicar que el usuario puede instalar tu AWP.
// Initialize deferredPrompt for use later to show browser install prompt.
let deferredPrompt;
window.addEventListener('beforeinstallprompt', (e) => {
// Prevent the mini-infobar from appearing on mobile
e.preventDefault();
// Stash the event so it can be triggered later.
deferredPrompt = e;
// Update UI notify the user they can install the PWA
showInstallPromotion();
// Optionally, send analytics event that PWA install promo was shown.
console.log(`'beforeinstallprompt' event was fired.`);
});
Flujo de instalación integrado en la app
Para proporcionar la instalación desde la app, incluye un botón o algún otro elemento de la interfaz en el que el usuario pueda hacer clic o presionar para instalar tu app. Cuando se haga clic o se presione el elemento, llama a prompt()
en el evento beforeinstallprompt
guardado (almacenado en la variable deferredPrompt
). Se le muestra al usuario un diálogo modal de instalación en el que se le pide que confirme que desea instalar tu PWA.
buttonInstall.addEventListener('click', async () => {
// Hide the app provided install promotion
hideInstallPromotion();
// Show the install prompt
deferredPrompt.prompt();
// Wait for the user to respond to the prompt
const { outcome } = await deferredPrompt.userChoice;
// Optionally, send analytics event with outcome of user choice
console.log(`User response to the install prompt: ${outcome}`);
// We've used the prompt and can't use it again, throw it away
deferredPrompt = null;
});
La propiedad userChoice
es una promesa que se resuelve con la elección del usuario.
Solo puedes llamar a prompt()
en el evento diferido una vez. Si el usuario lo descarta, deberás esperar hasta que se vuelva a activar el evento beforeinstallprompt
, por lo general, inmediatamente después de que se haya resuelto la propiedad userChoice
.
Detecta cuándo se instaló correctamente la PWA
Puedes usar la propiedad userChoice
para determinar si el usuario instaló tu app desde tu interfaz de usuario. Sin embargo, si el usuario instala tu PWA desde la barra de direcciones o desde otro componente del navegador, userChoice
no será de ayuda.
En su lugar, debes escuchar el evento appinstalled
, que se activa cada vez que se instala tu PWA, sin importar el mecanismo que se use para instalarla.
window.addEventListener('appinstalled', () => {
// Hide the app-provided install promotion
hideInstallPromotion();
// Clear the deferredPrompt so it can be garbage collected
deferredPrompt = null;
// Optionally, send analytics event to indicate successful install
console.log('PWA was installed');
});
Detecta cómo se inició la AWP
La consulta de medios display-mode
de CSS indica cómo se inició la AWP, ya sea en una pestaña del navegador o como una AWP instalada. Esto permite aplicar diferentes estilos según cómo se inició la app. Por ejemplo, puedes configurarlo para que siempre oculte el botón de instalación y proporcione un botón de atrás cuando se inicie como una AWP instalada.
Haz un seguimiento de cómo se inició la AWP
Para hacer un seguimiento de cómo los usuarios inician tu PWA, usa matchMedia()
para probar la consulta de medios display-mode
.
function getPWADisplayMode() {
if (document.referrer.startsWith('android-app://'))
return 'twa';
if (window.matchMedia('(display-mode: browser)').matches)
return 'browser';
if (window.matchMedia('(display-mode: standalone)').matches || navigator.standalone)
return 'standalone';
if (window.matchMedia('(display-mode: minimal-ui)').matches)
return 'minimal-ui';
if (window.matchMedia('(display-mode: fullscreen)').matches)
return 'fullscreen';
if (window.matchMedia('(display-mode: window-controls-overlay)').matches)
return 'window-controls-overlay';
return 'unknown';
}
Haz un seguimiento de cuándo cambia el modo de visualización
Para hacer un seguimiento de si el usuario cambia entre browser
y otros modos de visualización, escucha los cambios en la consulta de medios display-mode
.
// Replace "standalone" with the display mode used in your manifest
window.matchMedia('(display-mode: standalone)').addEventListener('change', () => {
// Log display mode change to analytics
console.log('DISPLAY_MODE_CHANGED', getPWADisplayMode());
});
Actualiza la IU según el modo de visualización actual
Para aplicar un color de fondo diferente a una PWA cuando se inicia como una PWA instalada, usa CSS condicional:
@media all and (display-mode: standalone) {
body {
background-color: yellow;
}
}
Actualiza el ícono y el nombre de tu app
¿Qué sucede si necesitas actualizar el nombre de tu app o proporcionar íconos nuevos? Consulta Cómo Chrome controla las actualizaciones del manifiesto de la app web para ver cuándo y cómo se reflejan esos cambios en Chrome.