Problèmes courants et signalement de bugs

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 :

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 Authorization dans 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 :

Outils de développement Firefox avec message de déchiffrement.

Pour vérifier si c'est le cas dans Chrome, procédez comme suit :

  1. Accédez à about://gcm-internals, puis cliquez sur le bouton "Start Recording" (Démarrer l'enregistrement).

Enregistrement des données internes de Chrome GCM.

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

Journal de déchiffrement des composants internes de GCM.

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.

Journal des messages reçus par les composants internes de GCM.

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

État de la connexion interne GCM.

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 PushSubscription illustrant 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

Ateliers de programmation