Preguntas frecuentes sobre las notificaciones push

¿Por qué las notificaciones push no funcionan cuando el navegador está cerrado?

Esta pregunta surge con bastante frecuencia, en gran parte porque hay algunas situaciones que dificultan su comprensión y razonamiento.

Comencemos con Android. El SO Android está diseñado para escuchar los mensajes push y, cuando recibe uno, activar la app para Android correspondiente para que lo controle, independientemente de si la app está cerrada o no.

Esto es exactamente lo mismo con cualquier navegador en Android: el navegador se activará cuando se reciba un mensaje push y, luego, activará tu service worker y enviará el evento push.

En los SO de escritorio, hay más matices y es más fácil de explicar en Mac OS X, ya que hay un indicador visual que ayuda a explicar las diferentes situaciones.

En Mac OS X, puedes saber si un programa se está ejecutando o no por una marca debajo del ícono de la app en el Dock.

Si comparas los dos íconos de Chrome en el siguiente dock, el de la izquierda se está ejecutando, como se ilustra con la marca debajo del ícono, mientras que el de Chrome de la derecha no se está ejecutando, por lo que no tiene la marca debajo.

Ejemplo de OS X

En el contexto de la recepción de mensajes push en computadoras, recibirás mensajes cuando el navegador se esté ejecutando, es decir, cuando tenga la marca debajo del ícono.

Esto significa que el navegador puede no tener ventanas abiertas y, aun así, recibirás el mensaje push en tu service worker, porque el navegador se ejecuta en segundo plano.

La única vez que no se recibirá un mensaje push es cuando el navegador esté completamente cerrado, es decir, que no se esté ejecutando en absoluto (sin marca). Lo mismo se aplica a Windows, aunque es un poco más difícil determinar si Chrome se está ejecutando en segundo plano.

¿Cómo hago para que mi app web de la pantalla principal se abra en pantalla completa desde una notificación push?

En Chrome para Android, se puede agregar una app web a la pantalla principal y, cuando se abre desde allí, puede iniciarse en modo de pantalla completa sin la barra de URL, como se muestra a continuación.

Ícono de la pantalla principal a pantalla completa

Para mantener esta experiencia coherente, los desarrolladores quieren que las notificaciones en las que se hace clic también abran su app web en pantalla completa.

Chrome "más o menos" implementó esto, aunque es posible que lo encuentres poco confiable y difícil de razonar. Los detalles de implementación pertinentes son los siguientes:

Esto significa que, a menos que el usuario visite tu sitio a través del ícono de la pantalla principal con bastante frecuencia, tus notificaciones se abrirán en la IU normal del navegador.

Se seguirá trabajando en este problema.

¿Por qué es mejor que los WebSockets?

Se puede activar un service worker cuando se cierra la ventana del navegador. Un socket web solo existirá mientras el navegador y la página web se mantengan abiertos.

¿Qué sucede con GCM, FCM, Web Push y Chrome?

Esta pregunta tiene varias facetas y la forma más fácil de explicarla es repasar la historia de las notificaciones push web y Chrome. (No te preocupes, es breve).

Diciembre de 2014

Cuando Chrome implementó por primera vez la tecnología push web, usó Google Cloud Messaging (GCM) para potenciar el envío de mensajes push del servidor al navegador.

Esto no era una notificación push web. Existen algunos motivos por los que esta configuración inicial de Chrome y GCM no era un envío de notificaciones web "real".

  • GCM requiere que los desarrolladores configuren una cuenta en Google Developers Console.
  • Chrome y GCM necesitaban un ID de remitente especial que una app web debía compartir para poder configurar los mensajes correctamente.
  • Los servidores de GCM aceptaban una solicitud a la API personalizada que no era un estándar web.

Julio de 2016

En julio, se lanzó una nueva función en las notificaciones push web: las claves del servidor de aplicaciones (o VAPID, como se conoce la especificación). Cuando Chrome agregó compatibilidad con esta nueva API, usó Firebase Cloud Messaging (también conocido como FCM) en lugar de GCM como servicio de mensajería. Esto es importante por varios motivos:

  • Las claves de Chrome y del servidor de aplicaciones no necesitan que se configure ningún tipo de proyecto con Google o Firebase. Funcionará sin problemas.
  • FCM admite el protocolo de Web Push, que es la API que admitirán todos los servicios de Web Push. Esto significa que, independientemente del servicio push que use un navegador, solo debes realizar el mismo tipo de solicitud y se enviará el mensaje.

¿Por qué es confuso hoy en día?

Existe una gran confusión ahora que se escribió contenido sobre el tema de las notificaciones push web, gran parte del cual hace referencia a GCM o FCM. Si el contenido hace referencia a GCM, probablemente debas tratarlo como un indicio de que es contenido antiguo O de que se enfoca demasiado en Chrome. (Yo soy culpable de hacer esto en varias publicaciones antiguas).

En cambio, piensa en las notificaciones push web como un navegador que usa un servicio push para administrar el envío y la recepción de mensajes, en el que el servicio push aceptará una solicitud de "protocolo push web". Si piensas en estos términos, puedes ignorar qué navegador y qué servicio de envío se está usando y ponerte a trabajar.

Esta guía se escribió para enfocarse en el enfoque de estándares de las notificaciones push web y, de forma deliberada, ignora todo lo demás.

Firebase tiene un SDK de JavaScript. ¿Qué es y para qué sirve?

Si encontraste el SDK web de Firebase y notaste que tiene una API de mensajería para JavaScript, es posible que te preguntes en qué se diferencia de las notificaciones push web.

El SDK de mensajería (conocido como SDK de JS de Firebase Cloud Messaging) realiza algunas acciones en segundo plano para facilitar la implementación de las notificaciones push web.

  • En lugar de preocuparte por un PushSubscription y sus diversos campos, solo debes preocuparte por un token de FCM (una cadena).
  • Con los tokens de cada usuario, puedes usar la API de FCM de propiedad exclusiva para activar mensajes push. Esta API no requiere encriptar las cargas útiles. Puedes enviar una carga útil de texto sin formato en el cuerpo de una solicitud POST.
  • La API de FCM admite funciones personalizadas, por ejemplo, temas de FCM (también funciona en la Web, aunque no está bien documentado).
  • Por último, FCM es compatible con Android, iOS y la Web, por lo que, para algunos equipos, es más fácil trabajar con él en proyectos existentes.

Esto usa las notificaciones push web tras bambalinas, pero su objetivo es abstraerlas.

Como dije en la pregunta anterior, si consideras las notificaciones push web como un navegador y un servicio push, puedes considerar el SDK de mensajería de Firebase como una biblioteca para simplificar la implementación de las notificaciones push web.

Próximos pasos

Code labs