Lorsque vous rencontrez un problème avec les notifications push Web, il peut être difficile de le déboguer ou de trouver de l'aide. Ce document décrit certains des problèmes courants et ce que vous devez faire si vous avez trouvé un bug dans Chrome ou Firefox.
Avant de nous lancer dans le débogage des notifications push, vous pouvez rencontrer des problèmes avec le débogage des service workers eux-mêmes, le fichier qui ne se met pas à jour, l'échec de l'enregistrement ou, de manière générale, un comportement inhabituel. Il existe un excellent document sur le débogage des service workers que je vous recommande vivement de consulter si vous débutez dans le développement de service workers.
Il existe deux étapes distinctes à vérifier lors du développement et du test des notifications push Web, chacune présentant ses propres problèmes courants :
- Envoi d'un message : assurez-vous que l'envoi des messages fonctionne.
Vous devriez obtenir un code HTTP 201. Si ce n'est pas le cas :
- Rechercher les erreurs d'autorisation : si vous recevez un message d'erreur d'autorisation, consultez la section Problèmes d'autorisation.
- Autres erreurs d'API : si vous recevez un code d'état autre que 201, consultez la section Codes d'état HTTP pour obtenir des conseils sur la cause du problème.
- Réception d'un message : si vous parvenez à envoyer un message, mais qu'il n'est pas reçu dans le navigateur :
- Vérifier les problèmes de chiffrement : consultez la section Problèmes de chiffrement de la charge utile.
- Vérifiez s'il y a des problèmes de connexion : si le problème se produit sur Chrome, il peut s'agir d'un problème de connexion. Pour en savoir plus, consultez la section Problèmes de connexion.
Si vous ne parvenez pas à envoyer et à recevoir un message push et que les sections pertinentes de ce document ne vous aident pas à résoudre le problème, vous avez peut-être trouvé un bug dans le mécanisme push lui-même. Dans ce cas, consultez la section Signaler des bugs pour envoyer un rapport de bug complet contenant toutes les informations nécessaires pour accélérer le processus de correction.
Avant de commencer, j'aimerais souligner que Firefox et le service AutoPush de Mozilla affichent des messages d'erreur très clairs. Si vous êtes bloqué et que vous ne savez pas d'où vient le problème, testez dans Firefox pour voir si vous obtenez un message d'erreur plus utile.
Problèmes d'autorisation
Les problèmes d'autorisation sont l'un des problèmes les plus courants rencontrés par les développeurs lorsqu'ils commencent à utiliser les notifications push Web. Il s'agit généralement d'un problème de configuration des clés de serveur d'application (également appelées clés VAPID) d'un site.
Le moyen le plus simple de prendre en charge le push dans Firefox et Chrome consiste à fournir un applicationServerKey dans l'appel subscribe(). L'inconvénient est que toute différence entre les clés de votre interface et celles de votre serveur entraînera une erreur d'autorisation.
Sur Chrome et FCM
Pour Chrome, qui utilise FCM comme service push, vous recevrez une réponse UnauthorizedRegistration de FCM pour différentes erreurs, toutes impliquant les clés du serveur d'applications.
Vous recevrez une erreur UnauthorizedRegistration dans l'un des cas suivants :
- Si vous ne définissez pas d'en-tête
Authorizationdans la requête envoyée à FCM. - La clé d'application utilisée pour abonner l'utilisateur ne correspond pas à celle utilisée pour signer l'en-tête d'autorisation.
- L'expiration n'est pas valide dans votre jeton JWT, c'est-à-dire qu'elle dépasse 24 heures ou que le jeton JWT a expiré.
- Le jeton JWT est incorrect ou comporte des valeurs non valides.
La réponse d'erreur complète se présente comme suit :
<html>
<head>
<title>UnauthorizedRegistration</title>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<h1>UnauthorizedRegistration</h1>
<h2>Error 400</h2>
</body>
</html>
Si vous recevez ce message d'erreur dans Chrome, essayez de tester dans Firefox pour voir si vous obtenez plus de renseignements sur le problème.
Firefox et Mozilla AutoPush
Firefox et Mozilla AutoPush fournissent un ensemble de messages d'erreur conviviaux pour les problèmes liés à Authorization.
Vous recevrez également une réponse d'erreur Unauthorized de Mozilla AutoPush si l'en-tête Authorization n'est pas inclus dans votre requête 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 l'expiration de votre jeton JWT est dépassée, vous recevrez également une erreur Unauthorized avec un message expliquant que le jeton a expiré.
{
"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 les clés du serveur d'application sont différentes entre le moment où l'utilisateur s'est abonné et celui où l'en-tête d'autorisation a été signé, une erreur Not Found est renvoyée :
{
"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"
}
Enfin, si votre jeton JWT contient une valeur non valide (par exemple, si la valeur "alg" est inattendue), vous recevrez l'erreur suivante 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"
}
Codes d'état HTTP
Plusieurs problèmes peuvent entraîner un code de réponse autre que 201 de la part d'un service push. Vous trouverez ci-dessous la liste des codes d'état HTTP et leur signification par rapport aux notifications push Web.
| Code d'état | Description |
|---|---|
| 429 | Trop de requêtes. Votre serveur d'application a atteint une limite de débit avec un service push. La réponse du service doit inclure un en-tête "Retry-After" pour indiquer le délai avant qu'une autre requête puisse être effectuée. |
| 400 | Demande incorrecte. L'un de vos en-têtes n'est pas valide ou est mal formaté. |
| 404 | Introuvable. Dans ce cas, vous devez supprimer PushSubscription de votre backend et attendre l'occasion de réabonner l'utilisateur. |
| 410 | Supprimée définitivement. L'abonnement n'est plus valide et doit être supprimé de votre backend. Pour reproduire ce problème, appelez "unsubscribe()" sur un "PushSubscription". |
| 413 | La taille de la charge utile est trop importante. La taille minimale de la charge utile qu'un service push doit accepter est de 4 096 octets (ou 4 ko). Tout fichier plus volumineux peut entraîner cette erreur. |
Si le code d'état HTTP ne figure pas dans cette liste et que le message d'erreur n'est pas utile, consultez la spécification du protocole Web Push pour voir si le code d'état est référencé, ainsi qu'un scénario d'utilisation de ce code d'état.
Problème de chiffrement de la charge utile
Si vous parvenez à déclencher un message push (c'est-à-dire à envoyer un message à un service push Web et à recevoir un code de réponse 201), mais que l'événement push ne se déclenche jamais dans votre service worker, cela indique généralement que le navigateur n'a pas réussi à déchiffrer le message qu'il a reçu.
Dans ce cas, un message d'erreur semblable à celui-ci s'affiche dans la console DevTools de Firefox :

Pour vérifier si c'est le cas dans Chrome, procédez comme suit :
- Accédez à about://gcm-internals, puis cliquez sur le bouton "Start Recording" (Démarrer l'enregistrement).

- Déclenchez un message push et consultez le journal des échecs de déchiffrement des messages.

En cas de problème lors du déchiffrement de la charge utile, une erreur semblable à celle affichée ci-dessus s'affiche. (Notez le message AES-GCM decryption failed dans la colonne "Détails".)
Voici quelques outils qui peuvent vous aider à déboguer le chiffrement si vous rencontrez ce problème :
Problème de connexion
Si vous ne recevez pas d'événement push dans votre service worker et que vous ne voyez aucune erreur de déchiffrement, il est possible que le navigateur ne parvienne pas à se connecter à un service push.
Dans Chrome, vous pouvez vérifier si le navigateur reçoit des messages en examinant le journal "Receive Message Log" (sic) dans about://gcm-internals.

Si vous ne recevez pas le message rapidement, assurez-vous que l'état de connexion de votre navigateur est CONNECTED :

Si l'état n'est pas "CONNECTED", vous devrez peut-être supprimer votre profil actuel et en créer un autre. Si le problème persiste, veuillez envoyer un rapport de bug comme suggéré ci-dessous.
Signaler des bugs
Si aucune des solutions ci-dessus ne permet de résoudre votre problème et que vous ne parvenez pas à en identifier la cause, veuillez signaler un problème pour le navigateur concerné :
Pour Chrome, vous pouvez signaler le problème sur cette page : https://bugs.chromium.org/p/chromium/issues/list Pour Firefox, vous pouvez signaler le problème sur cette page : https://bugzilla.mozilla.org/
Pour fournir un bon rapport de bug, vous devez fournir les informations suivantes :
- Navigateurs sur lesquels vous avez effectué des tests (par exemple, Chrome version 50, Chrome version 51, Firefox version 50, Firefox version 51)
- Un exemple de
PushSubscriptionillustrant le problème. - Incluez des exemples de requêtes (par exemple, le contenu des requêtes réseau adressées à un service push, y compris les en-têtes).
- Incluez également des exemples de réponses aux requêtes réseau.
Si vous pouvez fournir un exemple reproductible, qu'il s'agisse d'un code source ou d'un site Web hébergé, cela accélère souvent le diagnostic et la résolution du problème.
Étapes suivantes
- Présentation des notifications push Web
- Fonctionnement de la méthode push
- Abonner un utilisateur
- Expérience utilisateur liée aux autorisations
- Envoyer des messages avec les bibliothèques Web Push
- Protocole Web Push
- Gérer les événements push
- Afficher une notification
- Comportement des notifications
- Modèles de notification courants
- Questions fréquentes sur les notifications push
- Problèmes courants et signalement de bugs