Cuando encuentras un problema con un envío web, puede ser difícil depurarlo o buscar 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 profundicemos en la depuración de push, es posible que tengas problemas con la depuración de service worker, que el archivo no se actualiza, no se registra o, por lo general, un comportamiento inusual. Hay un documento increíble sobre la depuración de service worker que te recomendamos que revises si recién estás comenzando el desarrollo de service worker.
Hay dos etapas distintas para marcar cuando se desarrolla y prueba el envío web, cada una con su propio conjunto de problemas habituales:
- Envío de un mensaje: Asegúrate de que el envío de mensajes se realice correctamente.
Deberías obtener un código HTTP 201. Si no es así:
- 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 de código de estado que no es 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 el navegador no lo recibe, haz lo siguiente:
- Comprueba si hay problemas de encriptación: consulta la sección de problema de encriptación de la carga útil.
- Comprueba si hay problemas de conexión: Si el problema se encuentra en Chrome, es posible que se trate de una conexión. Consulta la sección Problemas de conexión para obtener más información.
Si no puedes enviar y recibir un mensaje push, y las secciones relevantes de este documento no ayudan a depurar el problema, es posible que hayas encontrado un error en el mecanismo de envío. En este caso, consulta la sección Genera informes de errores para enviar un buen informe de errores con toda la información necesaria para acelerar el proceso de corrección.
Antes de comenzar, me gustaría mencionar que Firefox y el servicio AutoPush de Mozilla tienen mensajes de error muy útiles. Si te atascas y no sabes con certeza cuál es el problema, pruébalo en Firefox y verifica si aparece un mensaje de error más útil.
Problemas con la autorización
Los problemas de autorización son uno de los problemas más comunes que enfrentan los desarrolladores cuando comienzan a usar el envío web. Por lo general, esto es 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 fácil de admitir el envío tanto en Firefox como en Chrome es proporcionar un applicationServerKey
en la llamada subscribe()
. La desventaja es que cualquier discrepancia entre el frontend y las claves 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 cuando se producen distintos
errores, todos relacionados con las claves del servidor de aplicaciones.
Recibirás un error UnauthorizedRegistration
en cualquiera de las siguientes situaciones:
- Si no puedes definir un encabezado
Authorization
en la solicitud que se envía a FCM - La clave de aplicación que se usa para suscribir al usuario no coincide con la clave que se usa con el fin de firmar el encabezado de autorización.
- El vencimiento no es válido en tu JWT, es decir, supera las 24 horas o el JWT venció.
- El JWT tiene errores de formato o tiene 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 proporcionará más información sobre el problema.
AutoPush de Firefox y Mozilla
Firefox y Mozilla AutoPush proporcionan un conjunto sencillo de mensajes de error para los problemas de Authorization
.
También recibirás una respuesta de error Unauthorized
de Mozilla AutoPush si el encabezado Authorization
no está incluido en tu solicitud push.
{
"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 venció, 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 el que se suscribió el usuario y el momento en que se firmó el encabezado de autorización, se mostrará 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
Existe una variedad de problemas que pueden provocar un código de respuesta que no sea 201 desde un servicio de envío. A continuación, se muestra una lista de códigos de estado HTTP y lo que significan con relación al envío web.
Código de estado | Descripción |
---|---|
429 | 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 falta para 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 a que haya una oportunidad para volver a suscribir al usuario. |
410 | Atrás. La suscripción ya no es válida y debería quitarse del backend. Esto se puede reproducir llamando a `unsubscribe()` en una `PushSubscription`. |
413 | La carga útil es demasiado grande. El tamaño mínimo de carga útil que debe admitir un servicio push es de 4,096 bytes (o 4 KB). Cualquier tamaño más grande puede generar este error. |
Si el código de estado HTTP no está en esta lista y el mensaje de error no es útil, revisa las especificaciones del protocolo de envío web 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 la carga útil
Si puedes activar correctamente un mensaje push (es decir, enviar un mensaje a un servicio web push y recibir un código de respuesta 201), pero el evento push nunca se activa en tu service worker, esto normalmente indica 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 este:
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 la grabación".
- Activa un mensaje push y busca en “Message Decryption Failure Log”.
Si ocurre un problema con la desencriptación de la carga útil, verás un error similar al que se mostró anteriormente. (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 Verificador de encriptación push de Peter Beverloo.
- Web Push: Página de prueba de encriptación de datos de Mozilla
Problema de conexión
Si no recibes un evento push en tu service worker y no ves ningún error de desencriptación, es posible que el navegador no pueda conectarse a un servicio push.
En Chrome, puedes verificar si el navegador está recibiendo mensajes. Para ello, examina el registro de recepción de mensajes (sic) en about://gcm-internals
.
Si no ves llegar el mensaje de manera oportuna, asegúrate de que
el estado de conexión de tu navegador sea CONNECTED
:
Si no está “CONECTADA”, 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.
Creación de informes de errores
Si ninguna de las opciones anteriores ayuda con tu problema y no hay indicios de cuál podría ser el inconveniente, infórmalo en el navegador con el que tienes problemas:
En el caso de Chrome, puedes mencionar el problema en este vínculo: https://bugs.chromium.org/p/chromium/issues/list. En el caso de Firefox, debes informar el problema en https://bugzilla.mozilla.org/.
Para brindar un buen informe de errores, debes proporcionar los siguientes detalles:
- Navegadores en los que realizaste las pruebas (p. ej., versión 50 de Chrome, versión 51 de Chrome, versión 50 de Firefox, versión 51 de Firefox)
- Un ejemplo de
PushSubscription
que demuestra el problema - Incluye cualquier solicitud de ejemplo (es decir, contenido de 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 código fuente o un sitio web alojado, esto 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 Push
- Cómo suscribirte a un usuario
- UX de permisos
- Envía mensajes con bibliotecas push web
- Protocolo de envío web
- Manejo de eventos push
- Muestra una notificación
- Comportamiento de las notificaciones
- Patrones de notificaciones comunes
- Preguntas frecuentes sobre las notificaciones push
- Problemas comunes e informes de errores