Cuando tienes un problema con las notificaciones push web, puede ser difícil depurarlo o encontrar ayuda. En este documento, se describen algunos de los problemas habituales y lo que debes hacer si encuentras un error en Chrome o Firefox.
Antes de que nos sumerjamos en la depuración de push, es posible que tengas problemas con la depuración de los service workers, que el archivo no se actualice, que no se registre o que, en general, tenga un comportamiento inusual. Hay un documento excelente sobre la depuración de service workers que te recomiendo que consultes si eres nuevo en el desarrollo de service workers.
Hay dos etapas distintas que se deben verificar cuando se desarrollan y prueban las notificaciones push web, cada una con su propio conjunto de problemas comunes:
- Envío de un mensaje: Asegúrate de que el envío de mensajes se realice correctamente.
Deberías recibir un código HTTP 201. Si no es así, haz lo siguiente:
- Verifica si hay errores de autorización: Si recibes un mensaje de error de autorización, consulta la sección Problemas de autorización.
- Otros errores de la API: Si recibes una respuesta con un código de estado que no sea 201, consulta la sección Códigos de estado HTTP para obtener orientación sobre la causa del problema.
- Recibir un mensaje: Si puedes enviar un mensaje correctamente,
pero no se recibe en el navegador, haz lo siguiente:
- Verifica si hay problemas de encriptación: Consulta la sección de problemas de encriptación de la carga útil.
- Verifica si hay problemas de conexión: Si el problema está en Chrome, es posible que se trate de un problema de conexión. Consulta la sección Problemas de conexión para obtener más información.
Si no puedes enviar ni recibir un mensaje push y las secciones pertinentes de este documento no te ayudan a depurar el problema, es posible que hayas encontrado un error en el mecanismo push. En este caso, consulta la sección Cómo generar informes de errores para presentar un informe de errores adecuado con toda la información necesaria para acelerar el proceso de corrección de errores.
Antes de comenzar, me gustaría destacar que Firefox y el servicio AutoPush de Mozilla tienen excelentes mensajes de error. Si te quedas sin ideas y no sabes cuál es el problema, realiza la prueba en Firefox y fíjate si obtienes un mensaje de error más útil.
Problemas de autorización
Los problemas de autorización son uno de los problemas más comunes que tienen los desarrolladores cuando comienzan a usar las notificaciones push web. Por lo general, se trata de un problema con la configuración de las claves del servidor de aplicaciones (también conocidas como claves VAPID) de un sitio.
La forma más sencilla de admitir las notificaciones push en Firefox y Chrome es proporcionar un
applicationServerKey en la llamada subscribe(). La desventaja es que
cualquier discrepancia entre las claves de tu frontend y las del servidor generará un
error de autorización.
En Chrome y FCM
En el caso de Chrome, que usa FCM como servicio push, recibirás una
respuesta UnauthorizedRegistration de FCM para una variedad de errores
diferentes, todos relacionados con las claves del servidor de aplicaciones.
Recibirás un error UnauthorizedRegistration en cualquiera de las siguientes
situaciones:
- Si no defines un encabezado
Authorizationen la solicitud a FCM. - La clave de aplicación que se usó para suscribir al usuario no coincide con la que se usó para firmar el encabezado de autorización.
- El vencimiento no es válido en tu JWT, es decir, el vencimiento supera las 24 horas o el JWT venció.
- El JWT tiene un formato incorrecto o valores no válidos.
La respuesta de error completa se ve de la siguiente manera:
<html>
<head>
<title>UnauthorizedRegistration</title>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<h1>UnauthorizedRegistration</h1>
<h2>Error 400</h2>
</body>
</html>
Si recibes este mensaje de error en Chrome, considera realizar pruebas en Firefox para ver si te proporciona más información sobre el problema.
Firefox y Mozilla AutoPush
Firefox y Mozilla AutoPush proporcionan un conjunto de mensajes de error descriptivos para
los problemas de Authorization.
También recibirás una respuesta de error Unauthorized de
Mozilla AutoPush si el encabezado Authorization no se incluye en tu solicitud
de envío.
{
"errno": 109,
"message": "Request did not validate missing authorization header",
"code": 401,
"more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
"error": "Unauthorized"
}
Si el vencimiento de tu JWT ya pasó, también recibirás un error
Unauthorized con un mensaje que explica que el token
venció.
{
"code": 401,
"errno": 109,
"error": "Unauthorized",
"more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
"message": "Request did not validate Invalid bearer token: Auth expired"
}
Si las claves del servidor de aplicaciones son diferentes entre el momento en que se suscribió el usuario
y el momento en que se firmó el encabezado de autorización, se devolverá un error
Not Found:
{
"errno": 102,
"message": "Request did not validate invalid token",
"code": 404,
"more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
"error": "Not Found"
}
Por último, si tienes un valor no válido en tu JWT (por ejemplo, si el valor "alg" es un valor inesperado), recibirás el siguiente error de Mozilla AutoPush:
{
"code": 401,
"errno": 109,
"error": "Unauthorized",
"more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
"message": "Request did not validate Invalid Authorization Header"
}
Códigos de estado HTTP
Hay una variedad de problemas que pueden generar un código de respuesta que no sea 201 de un servicio de envío. A continuación, se muestra una lista de códigos de estado HTTP y lo que significan en relación con las notificaciones push web.
| Código de estado | Descripción |
|---|---|
| 429 | Hay demasiadas solicitudes. Tu servidor de aplicaciones alcanzó un límite de frecuencia con un servicio de envío. La respuesta del servicio debe incluir un encabezado "Retry-After" para indicar cuánto tiempo debe transcurrir antes de que se pueda realizar otra solicitud. |
| 400 | Solicitud no válida. Uno de tus encabezados no es válido o tiene un formato incorrecto. |
| 404 | No se encontró. En este caso, debes borrar la PushSubscription de tu backend y esperar una oportunidad para volver a suscribir al usuario. |
| 410 | No disponible. La suscripción ya no es válida y se debe quitar de tu backend. Esto se puede reproducir llamando a `unsubscribe()` en una `PushSubscription`. |
| 413 | El tamaño de la carga útil es demasiado grande. El tamaño mínimo de carga útil que debe admitir un servicio de envío push es de 4,096 bytes (o 4 KB). Cualquier valor superior puede generar este error. |
Si el código de estado HTTP no está en esta lista y el mensaje de error no es útil, consulta la especificación del protocolo de Web Push para ver si se hace referencia al código de estado junto con una situación en la que se puede usar ese código de estado.
Problema de encriptación de carga útil
Si puedes activar correctamente un mensaje push (es decir, enviar un mensaje a un servicio push web y recibir un código de respuesta 201), pero el evento push nunca se activa en tu service worker, esto suele indicar que el navegador no pudo desencriptar el mensaje que recibió.
Si este es el caso, deberías ver un mensaje de error en la consola de Herramientas para desarrolladores de Firefox, como el siguiente:

Para comprobar si este es el problema en Chrome, haz lo siguiente:
- Ve a about://gcm-internals y haz clic en el botón "Iniciar grabación".

- Activa un mensaje push y busca en el "Registro de errores de desencriptación de mensajes".

Si hay un problema con la desencriptación de la carga útil, verás un error
similar al que se muestra más arriba. (Observa el mensaje AES-GCM decryption failed
en la columna de detalles).
Existen algunas herramientas que pueden ayudarte a depurar la encriptación si este es tu problema:
- Herramienta Push Encryption Verifier de Peter Beverloo.
- Web Push: Data Encryption Test Page de Mozilla
Problema de conexión
Si no recibes un evento de envío en tu service worker y no ves ningún error de desencriptación, es posible que el navegador no se conecte a un servicio de envío.
En Chrome, puedes verificar si el navegador recibe mensajes examinando
el "Registro de mensajes recibidos" (sic) en about://gcm-internals.

Si no ves que el mensaje llegue de manera oportuna, asegúrate de que
el estado de conexión de tu navegador sea CONNECTED:

Si no es "CONNECTED", es posible que debas borrar tu perfil actual y crear uno nuevo. Si el problema persiste, envía un informe de errores como se sugiere a continuación.
Cómo generar informes de errores
Si ninguna de las opciones anteriores te ayuda con el problema y no hay indicios de cuál podría ser, comunícalo al navegador con el que tienes el problema:
En el caso de Chrome, puedes informar el problema aquí: https://bugs.chromium.org/p/chromium/issues/list En el caso de Firefox, debes informar el problema en: https://bugzilla.mozilla.org/
Para proporcionar un buen informe de errores, debes incluir los siguientes detalles:
- Navegadores en los que realizaste las pruebas (p. ej., Chrome versión 50, Chrome versión 51, Firefox versión 50, Firefox versión 51)
- Un
PushSubscriptionde ejemplo que demuestre el problema - Incluye cualquier solicitud de ejemplo (es decir, el contenido de las solicitudes de red a un servicio de envío, incluidos los encabezados).
- Incluye también cualquier respuesta de ejemplo de las solicitudes de red.
Si puedes proporcionar un ejemplo reproducible, ya sea un código fuente o un sitio web alojado, suele acelerar el diagnóstico y la resolución del problema.
Próximos pasos
- Descripción general de las notificaciones push web
- Cómo funciona la tecnología push
- Cómo suscribir a un usuario
- UX de permisos
- Envía mensajes con bibliotecas de Web Push
- Protocolo de Web Push
- Cómo controlar los eventos push
- Cómo mostrar una notificación
- Comportamiento de las notificaciones
- Patrones de notificaciones comunes
- Preguntas frecuentes sobre las notificaciones push
- Problemas habituales y cómo informar errores