Häufige Probleme und Fehlerberichte

Matt Gaunt

Wenn bei Web-Push-Benachrichtigungen ein Problem auftritt, kann es schwierig sein, den Fehler zu beheben oder Hilfe zu finden. In diesem Dokument werden einige der häufigsten Probleme beschrieben und was Sie tun sollten, wenn Sie einen Fehler in Chrome oder Firefox gefunden haben.

Bevor wir uns mit dem Debugging von Push-Benachrichtigungen befassen, können Probleme beim Debugging von Service Workern selbst auftreten, z. B. dass die Datei nicht aktualisiert wird, die Registrierung fehlschlägt oder allgemein ungewöhnliches Verhalten auftritt. Es gibt ein gutes Dokument zum Debuggen von Service Workern, das ich Ihnen dringend empfehle, wenn Sie neu in der Entwicklung von Service Workern sind.

Bei der Entwicklung und beim Testen von Web-Push-Benachrichtigungen gibt es zwei verschiedene Phasen, die jeweils eigene häufige Probleme mit sich bringen:

  • Nachricht senden: Prüfen Sie, ob Nachrichten erfolgreich gesendet werden. Sie sollten den HTTP-Code 201 erhalten. Wenn Sie nicht:
    • Auf Autorisierungsfehler prüfen: Wenn Sie eine Autorisierungsfehlermeldung erhalten, lesen Sie den Abschnitt Autorisierungsprobleme.
    • Andere API-Fehler: Wenn Sie eine Antwort mit einem anderen Statuscode als 201 erhalten, finden Sie im Abschnitt HTTP-Statuscodes Informationen zur Ursache des Problems.
  • Nachrichten empfangen: Wenn Sie eine Nachricht erfolgreich senden können, die Nachricht aber nicht im Browser empfangen wird:

Wenn Sie keine Push-Nachrichten senden und empfangen können und die entsprechenden Abschnitte in diesem Dokument nicht bei der Fehlerbehebung helfen, haben Sie möglicherweise einen Fehler im Push-Mechanismus selbst gefunden. In diesem Fall finden Sie im Abschnitt Fehlerberichte erstellen Informationen dazu, wie Sie einen guten Fehlerbericht mit allen erforderlichen Informationen einreichen, um die Fehlerkorrektur zu beschleunigen.

Bevor wir beginnen, möchte ich noch erwähnen, dass Firefox und der Mozilla AutoPush-Dienst sehr gute Fehlermeldungen haben. Wenn Sie nicht weiterkommen und sich nicht sicher sind, was das Problem ist, testen Sie in Firefox, ob Sie eine hilfreichere Fehlermeldung erhalten.

Autorisierungsprobleme

Autorisierungsprobleme sind eines der häufigsten Probleme, auf die Entwickler stoßen, wenn sie mit Web-Push beginnen. Dies ist normalerweise ein Problem mit der Konfiguration der Anwendungsserverschlüssel (auch VAPID-Schlüssel genannt) einer Website.

Am einfachsten lässt sich Push sowohl in Firefox als auch in Chrome unterstützen, indem Sie im subscribe()-Aufruf einen applicationServerKey angeben. Der Nachteil ist, dass jede Abweichung zwischen den Schlüsseln des Frontends und des Servers zu einem Autorisierungsfehler führt.

In Chrome und FCM

In Chrome, wo FCM als Push-Dienst verwendet wird, erhalten Sie bei einer Reihe verschiedener Fehler, die alle mit den Anwendungsserverschlüsseln zusammenhängen, eine UnauthorizedRegistration-Antwort von FCM.

In den folgenden Situationen erhalten Sie einen UnauthorizedRegistration-Fehler:

  • Wenn Sie in der Anfrage an FCM keinen Authorization-Header definieren.
  • Der Anwendungsschlüssel, der zum Abonnieren des Nutzers verwendet wurde, stimmt nicht mit dem Schlüssel überein, der zum Signieren des Autorisierungsheaders verwendet wurde.
  • Das Ablaufdatum in Ihrem JWT ist ungültig, d.h. es liegt mehr als 24 Stunden in der Zukunft oder das JWT ist abgelaufen.
  • Das JWT ist fehlerhaft oder enthält ungültige Werte.

Die vollständige Fehlerantwort sieht so aus:

<html>
  <head>
    <title>UnauthorizedRegistration</title>
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <h1>UnauthorizedRegistration</h1>

    <h2>Error 400</h2>
  </body>
</html>

Wenn Sie diese Fehlermeldung in Chrome erhalten, können Sie den Test in Firefox ausführen, um weitere Informationen zum Problem zu erhalten.

Firefox und Mozilla AutoPush

Firefox und Mozilla AutoPush bieten eine Reihe von Fehlermeldungen für Authorization-Probleme.

Sie erhalten außerdem eine Unauthorized-Fehlerantwort von Mozilla AutoPush, wenn der Authorization-Header nicht in Ihrer Push-Anfrage enthalten ist.

{
  "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"
}

Wenn das Ablaufdatum in Ihrem JWT abgelaufen ist, erhalten Sie ebenfalls einen Unauthorized-Fehler mit einer Meldung, die erklärt, dass das Token abgelaufen ist.

{
  "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"
}

Wenn sich die Anwendungsserverschlüssel zwischen dem Zeitpunkt, zu dem der Nutzer abonniert wurde, und dem Zeitpunkt, zu dem der Autorisierungsheader signiert wurde, unterscheiden, wird ein Not Found-Fehler zurückgegeben:

{
  "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"
}

Wenn dein JWT einen ungültigen Wert enthält (z. B. wenn der Wert „alg“ unerwartet ist), erhältst du von Mozilla AutoPush die folgende Fehlermeldung:

{
  "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"
}

HTTP-Statuscodes

Es gibt eine Reihe von Problemen, die dazu führen können, dass ein Push-Dienst einen anderen Antwortcode als 201 zurückgibt. Im Folgenden finden Sie eine Liste der HTTP-Statuscodes und ihrer Bedeutung im Zusammenhang mit Web-Push-Benachrichtigungen.

Statuscode Beschreibung
429 Zu viele Anfragen. Ihr Anwendungsserver hat ein Ratenlimit bei einem Push-Dienst erreicht. Die Antwort des Dienstes sollte einen „Retry-After“-Header enthalten, der angibt, wie lange es dauert, bis eine weitere Anfrage gestellt werden kann.
400 Ungültige Anfrage. Eine Ihrer Überschriften ist ungültig oder schlecht formatiert.
404 Nicht gefunden. In diesem Fall solltest du die PushSubscription aus deinem Back-End löschen und warten, bis du den Nutzer erneut abonnieren kannst.
410 Nicht mehr vorhanden. Das Abo ist nicht mehr gültig und sollte aus dem Back-End entfernt werden. Dies kann durch Aufrufen von „unsubscribe()“ für ein „PushSubscription“-Objekt reproduziert werden.
413 Nutzlastgröße zu groß. Die Mindestgröße der Nutzlast, die ein Push-Dienst unterstützen muss, beträgt 4.096 Byte (oder 4 KB). Größere Dateien können zu diesem Fehler führen.

Wenn der HTTP-Statuscode nicht in dieser Liste enthalten ist und die Fehlermeldung nicht hilfreich ist, prüfen Sie in der Spezifikation des Web-Push-Protokolls, ob der Statuscode zusammen mit einem Szenario aufgeführt ist, in dem er verwendet werden kann.

Problem mit der Nutzlastverschlüsselung

Wenn Sie eine Push-Nachricht erfolgreich auslösen können (d.h. eine Nachricht an einen Web-Push-Dienst senden und den Antwortcode 201 erhalten), das Push-Ereignis aber nie in Ihrem Service Worker ausgelöst wird, bedeutet das normalerweise, dass der Browser die empfangene Nachricht nicht entschlüsseln konnte.

In diesem Fall sollte in der DevTools-Konsole von Firefox eine Fehlermeldung wie die folgende angezeigt werden:

Firefox-Entwicklertools mit Entschlüsselungsnachricht.

So prüfen Sie, ob dies das Problem in Chrome ist:

  1. Rufen Sie about://gcm-internals auf und klicken Sie auf den Button „Aufnahme starten“.

Chrome GCM-interne Aufzeichnung.

  1. Lösen Sie eine Push-Benachrichtigung aus und sehen Sie sich das Protokoll „Message Decryption Failure Log“ an.

GCM-internes Entschlüsselungsprotokoll.

Wenn bei der Entschlüsselung der Nutzlast ein Problem auftritt, wird ein Fehler wie der oben gezeigte angezeigt. (Beachten Sie die Nachricht AES-GCM decryption failed in der Spalte „Details“.)

Es gibt einige Tools, mit denen Sie die Verschlüsselung debuggen können, falls dies Ihr Problem ist:

Verbindungsproblem

Wenn Sie in Ihrem Service Worker kein Push-Ereignis erhalten und keine Entschlüsselungsfehler angezeigt werden, kann der Browser möglicherweise keine Verbindung zu einem Push-Dienst herstellen.

In Chrome können Sie prüfen, ob der Browser Nachrichten empfängt, indem Sie das „Receive Message Log“ (sic) in about://gcm-internals aufrufen.

GCM-internes Protokoll für empfangene Nachrichten.

Wenn die Nachricht nicht zeitnah ankommt, prüfen Sie, ob der Verbindungsstatus Ihres Browsers CONNECTED ist:

Verbindungsstatus der GCM-Interna.

Wenn der Status nicht „VERBUNDEN“ lautet, müssen Sie möglicherweise Ihr aktuelles Profil löschen und ein neues erstellen. Wenn das Problem dadurch nicht behoben wird, erstelle bitte einen Fehlerbericht, wie unten beschrieben.

Fehlerberichte erstellen

Wenn keiner der oben genannten Schritte hilft und es keine Anzeichen dafür gibt, was das Problem sein könnte, melden Sie ein Problem für den Browser, mit dem Sie Probleme haben:

Für Chrome können Sie das Problem hier melden: https://bugs.chromium.org/p/chromium/issues/list Für Firefox können Sie das Problem hier melden: https://bugzilla.mozilla.org/

Ein guter Fehlerbericht sollte die folgenden Details enthalten:

  • Browser, in denen Sie den Fehler getestet haben (z.B. Chrome Version 50, Chrome Version 51, Firefox Version 50, Firefox Version 51).
  • Ein Beispiel-PushSubscription, das das Problem veranschaulicht.
  • Fügen Sie Beispielanfragen hinzu (z.B. Inhalt von Netzwerkanfragen an einen Push-Dienst, einschließlich Headern).
  • Fügen Sie auch Beispielantworten aus Netzwerkanfragen hinzu.

Wenn Sie ein reproduzierbares Beispiel bereitstellen können, entweder Quellcode oder eine gehostete Website, beschleunigt das oft die Diagnose und Lösung des Problems.

Weitere Informationen

Code labs