Does Safari support beforeinstallprompt?

Optimizando la Instalación de PWAs con beforeinstallprompt

hace 2 años

Valoración: 4.37 (7325 votos)

Las Progressive Web Apps (PWAs) han emergido como una tecnología poderosa para ofrecer experiencias web similares a aplicaciones nativas, directamente desde el navegador. Una de las claves para el éxito de una PWA reside en su capacidad de ser instalada en el dispositivo del usuario, facilitando el acceso y mejorando la interacción. Aquí es donde el evento beforeinstallprompt juega un papel fundamental, permitiendo a los desarrolladores tomar el control del proceso de instalación y optimizarlo para sus usuarios.

What is beforeinstallprompt?
The beforeinstallprompt event fires when the browser has detected that a website can be installed as a Progressive Web App. There's no guaranteed time this event is fired, but it usually happens on page load. Sep 2, 2024
Índice de Contenido

¿Qué es beforeinstallprompt y por qué es importante?

El evento beforeinstallprompt es un evento del navegador que se dispara cuando este detecta que un sitio web cumple con los criterios de instalación para convertirse en una PWA. En términos sencillos, el navegador identifica que tu sitio web es lo suficientemente robusto y funcional como para ofrecer una experiencia similar a una aplicación instalada.

La importancia de este evento radica en que te brinda la oportunidad de personalizar la experiencia de instalación. Sin él, el navegador mostraría un mensaje de instalación genérico, a menudo poco atractivo o confuso para el usuario. Con beforeinstallprompt, puedes:

  • Presentar tu propia interfaz de usuario (UI) de instalación: En lugar de depender del mensaje predeterminado del navegador, puedes diseñar un diálogo de instalación que se integre perfectamente con el diseño y la marca de tu PWA.
  • Proporcionar contexto adicional: Puedes explicar a los usuarios por qué deberían instalar tu PWA, destacando sus beneficios y funcionalidades específicas. Esto aumenta las posibilidades de que el usuario acepte la instalación.
  • Mejorar las tasas de instalación: Al hacer el proceso más atractivo y comprensible, incrementas la probabilidad de que los usuarios instalen tu PWA, convirtiendo visitantes ocasionales en usuarios recurrentes.

¿Cuándo se activa el evento beforeinstallprompt?

No existe un momento exacto garantizado para que se active el evento beforeinstallprompt, pero generalmente ocurre durante la carga de la página, una vez que el navegador ha determinado que el sitio web cumple con los criterios de instalación de PWA. Es importante tener en cuenta que este evento no se activará si la PWA ya está instalada, si no cumple con los criterios de instalación, o en navegadores que no lo soportan.

Implementando beforeinstallprompt: Una guía paso a paso

Para aprovechar el poder de beforeinstallprompt, sigue estos pasos:

  1. Escucha el evento: Utiliza JavaScript para agregar un event listener al objeto window que esté atento al evento beforeinstallprompt.
  2. Previene el comportamiento predeterminado: Llama a e.preventDefault() dentro del controlador del evento para evitar que el navegador muestre su mensaje de instalación predeterminado.
  3. Guarda el evento: Almacena una referencia al objeto BeforeInstallPromptEvent que se pasa al controlador del evento. Necesitarás este objeto más adelante para activar la solicitud de instalación.
  4. Muestra tu UI de instalación personalizada: Haz visible tu interfaz de usuario de instalación (que debe estar oculta por defecto) para invitar al usuario a instalar la PWA.
  5. Activa la solicitud de instalación: Cuando el usuario interactúe con tu UI de instalación (por ejemplo, haciendo clic en un botón de "Instalar"), utiliza el objeto BeforeInstallPromptEvent guardado previamente y llama a su método prompt(). Esto mostrará el diálogo de instalación del navegador, pero solo después de que hayas proporcionado contexto al usuario.

Ejemplo de código JavaScript

let deferredPrompt; window.addEventListener('beforeinstallprompt', (e) => { // Prevenir la mini-infobar o el diálogo de instalación predeterminado en móviles. e.preventDefault(); // Guardar el evento para usarlo más tarde. deferredPrompt = e; // Mostrar tu mensaje de instalación personalizado para tu PWA. mostrarPromocionInstalacionEnApp(); }); // ... (Función para mostrar tu UI de instalación personalizada: mostrarPromocionInstalacionEnApp()) // Ejemplo de cómo activar la solicitud de instalación cuando el usuario interactúa con tu UI. const botonInstalar = document.getElementById('botonInstalarPWA'); botonInstalar.addEventListener('click', async () => { if (deferredPrompt) { deferredPrompt.prompt(); const { outcome } = await deferredPrompt.userChoice; if (outcome === 'accepted') { console.log('Usuario aceptó la solicitud de instalación.'); } else { console.log('Usuario rechazó la solicitud de instalación.'); } deferredPrompt = null; // El deferredPrompt solo se puede usar una vez. } }); 

En este ejemplo, se escucha el evento beforeinstallprompt, se guarda el evento en deferredPrompt y se muestra una UI de instalación personalizada mediante la función mostrarPromocionInstalacionEnApp(). Luego, cuando el usuario hace clic en el botón "Instalar", se llama a deferredPrompt.prompt() para mostrar el diálogo de instalación del navegador.

Compatibilidad con navegadores: ¿Funciona en Safari?

Es crucial tener en cuenta la compatibilidad del navegador con beforeinstallprompt. Actualmente, este evento está implementado principalmente en navegadores basados en Chromium, como Google Chrome, Microsoft Edge, Brave y otros. Esto significa que en la mayoría de los navegadores modernos de escritorio y Android, beforeinstallprompt funcionará correctamente.

How to trigger beforeinstallprompt?
LISTENING FOR BEFOREINSTALLPROMPT , Call preventDefault() on the event. This prevents the browser from displaying its own install UI. , Take a reference to the event object that's passed into the handler. ... , Reveal our in-app install UI by removing the hidden attribute on the button.

Sin embargo, Safari, tanto en macOS como en iOS y iPadOS, no soporta el evento beforeinstallprompt. Esto implica que en dispositivos Apple, no podrás personalizar el mensaje de instalación de la PWA utilizando este evento. En Safari, la instalación de PWAs se realiza a través del menú "Compartir" y la opción "Añadir a la pantalla de inicio".

En Chrome y Edge en iOS y iPadOS, tampoco se admite la instalación de PWAs de la misma manera que en Android o escritorio. En estos casos, la opción de instalación se limita a abrir la PWA en Safari y seguir el proceso de instalación manual desde allí.

Tabla de compatibilidad resumida:

NavegadorSoporte de beforeinstallprompt
Google Chrome (Escritorio y Android)
Microsoft Edge (Escritorio y Android)
Brave (Escritorio y Android)
Safari (macOS, iOS, iPadOS)No
Chrome/Edge (iOS, iPadOS)No (Instalación limitada a Safari)

¿Cuándo NO se activa beforeinstallprompt?

Es importante comprender las situaciones en las que el evento beforeinstallpromptno se activará:

  • La PWA ya está instalada: Si el usuario ya ha instalado tu PWA, el evento no se disparará en visitas posteriores. Esto es válido tanto para computadoras como para WebAPKs en Android.
  • La PWA no cumple los criterios de instalación: Para que se active el evento, tu PWA debe cumplir con ciertos requisitos, como tener un manifiesto web válido, un service worker registrado, y ser servida a través de HTTPS. Si tu PWA no cumple estos criterios, el navegador no la considerará instalable y el evento no se activará.
  • Dispositivo no compatible o sin permisos: En algunos casos, el dispositivo del usuario puede no ser compatible con la instalación de PWAs (por ejemplo, dispositivos en modo quiosco) o puede que el usuario no tenga los permisos necesarios para instalar aplicaciones. En estas situaciones, el evento no se activará.
  • Navegadores no compatibles: Como se mencionó anteriormente, navegadores como Safari no soportan beforeinstallprompt, por lo que el evento nunca se activará en ellos.

Mejores prácticas y dónde mostrar la solicitud de instalación

La ubicación y el momento en que presentas tu solicitud de instalación personalizada son cruciales para el éxito. Aquí hay algunas mejores prácticas:

  • Contexto es clave: Muestra la solicitud de instalación en momentos relevantes para el usuario, cuando estén más comprometidos con tu PWA y entiendan su valor.
  • Integración natural: Incorpora la solicitud de instalación de forma fluida dentro de la UI de tu PWA, sin interrumpir la experiencia del usuario.
  • Evita la intrusión: No muestres la solicitud de instalación de forma agresiva o prematura. Es mejor esperar a que el usuario haya interactuado con tu PWA y comprenda sus beneficios.

Algunos lugares comunes y efectivos para mostrar la solicitud de instalación incluyen:

  • Menú lateral o de navegación: Un botón o enlace discreto en el menú lateral puede ser una opción accesible y no intrusiva.
  • Después de completar una tarea importante: Solicitar la instalación después de que el usuario haya completado un flujo crítico, como realizar un pedido, registrarse o consumir contenido relevante, puede ser un momento oportuno.
  • Página de registro o bienvenida: Si tu PWA requiere registro, la página de registro o bienvenida puede ser un buen lugar para presentar la opción de instalación.

Recopilando estadísticas: userChoice y el evento appinstalled

Para comprender la efectividad de tu estrategia de instalación personalizada, es fundamental recopilar estadísticas. El evento beforeinstallprompt te proporciona la propiedad userChoice, que es una promesa que se resuelve con la acción que el usuario realizó en el diálogo de instalación (aceptar o rechazar).

installButton.addEventListener('click', async () => { // ... (código para activar deferredPrompt.prompt()) const { outcome } = await deferredPrompt.userChoice; if (outcome === 'accepted') { console.log('Usuario aceptó la solicitud de instalación.'); // Registra un evento de éxito de instalación en tus analíticas. } else if (outcome === 'dismissed') { console.log('Usuario rechazó la solicitud de instalación.'); // Registra un evento de rechazo de instalación en tus analíticas. } }); 

Además, los navegadores Chromium activan el evento appinstalled en el objeto window cuando el usuario acepta la instalación, independientemente de si la solicitud se originó desde tu UI personalizada o desde la UI del navegador. Puedes escuchar este evento para rastrear las instalaciones exitosas.

What is beforeinstallprompt?
The beforeinstallprompt event fires when the browser has detected that a website can be installed as a Progressive Web App. There's no guaranteed time this event is fired, but it usually happens on page load. Sep 2, 2024
window.addEventListener('appinstalled', (evt) => { console.log('PWA instalada exitosamente.'); // Registra un evento de instalación exitosa en tus analíticas. }); 

Resguardo para navegadores sin beforeinstallprompt

Dado que beforeinstallprompt no es compatible con todos los navegadores, es importante implementar un plan de resguardo para aquellos navegadores que no lo soportan, como Safari. En estos casos, la mejor opción es proporcionar instrucciones claras y sencillas sobre cómo instalar la PWA manualmente utilizando las funcionalidades del navegador (por ejemplo, "Añadir a la pantalla de inicio" en Safari).

Puedes detectar si estás en un navegador que no soporta beforeinstallprompt y mostrar estas instrucciones alternativas. Además, es recomendable mostrar estas instrucciones solo cuando la PWA se visualiza en el modo de navegador, y ocultarlas cuando se ejecuta en modo standalone o fullscreen (ya que en estos modos, la PWA ya está instalada).

Puedes utilizar media queries CSS para mostrar las instrucciones de instalación solo en modo navegador:

#instruccionesInstalacion { display: none; } @media (display-mode: browser) { #instruccionesInstalacion { display: block; } } 

Recursos y bibliotecas útiles

Para facilitar la implementación de la solicitud de instalación personalizada, existen algunas bibliotecas y recursos que pueden ser de gran ayuda:

  • Codelab "Haz que sea instalable": Un excelente codelab de Google que te guía a través del proceso de hacer que tu PWA sea instalable y utilizar beforeinstallprompt: Enlace al codelab (revisar enlace real)
  • Bibliotecas de UI de instalación: Existen algunas bibliotecas de JavaScript que ofrecen componentes de UI preconstruidos para la solicitud de instalación, aunque es recomendable crear tu propia UI personalizada para una mejor integración con tu PWA. (Investigar bibliotecas disponibles)

Conclusión

El evento beforeinstallprompt es una herramienta poderosa para optimizar la experiencia de instalación de tus Progressive Web Apps. Al permitirte personalizar el mensaje de instalación y proporcionar contexto a los usuarios, puedes mejorar significativamente las tasas de instalación y convertir visitantes en usuarios habituales. Si bien es importante considerar la compatibilidad con navegadores y ofrecer resguardos para aquellos que no lo soportan, la implementación de beforeinstallprompt en navegadores Chromium te permitirá llevar tus PWAs al siguiente nivel y ofrecer una experiencia de usuario más atractiva y efectiva.

Subir