Häufige Probleme und Fehler melden

Matt Gaunt

Wenn bei einem Web-Push ein Problem auftritt, kann es schwierig sein, das Problem zu beheben oder Hilfe zu erhalten. In diesem Dokument werden einige der häufigsten Probleme beschrieben. Außerdem erfahren Sie, was Sie tun sollten, wenn Sie einen Fehler in Chrome oder Firefox finden.

Bevor wir uns mit dem Debuggen von Push befassen, kann es sein, dass Sie Probleme mit der Fehlerbehebung für die Dienst-Worker selbst haben, dass die Datei nicht aktualisiert wird, sich nicht registrieren lässt oder generell ein ungewöhnliches Verhalten auftritt. Es gibt ein großartiges Dokument zum Debuggen von Service Workern, das Sie unbedingt lesen sollten, wenn Sie mit der Service Worker-Entwicklung noch nicht vertraut sind.

Beim Entwickeln und Testen von Web-Push gibt es zwei verschiedene Phasen, die jeweils ihre eigenen häufigen Probleme / Probleme aufweisen:

  • Nachricht senden:Vergewissern Sie sich, dass Nachrichten erfolgreich gesendet wurden. Du solltest einen 201-HTTP-Code erhalten. Falls nicht:
    • Auf Autorisierungsfehler prüfen:Wenn Sie eine Fehlermeldung bei der Autorisierung erhalten, lesen Sie den Abschnitt Autorisierungsprobleme.
    • Andere API-Fehler:Wenn Sie eine Antwort mit einem anderen Statuscode als 201 erhalten, finden Sie im Abschnitt zu HTTP-Statuscodes eine Anleitung zur Ursache des Problems.
  • Nachrichten empfangen: Wenn du eine Nachricht senden kannst, die Nachricht aber nicht im Browser empfangen wird:

Wenn Sie keine Push-Nachrichten senden oder empfangen können und die relevanten Abschnitte in diesem Dokument nicht bei der Fehlerbehebung des Problems helfen, haben Sie möglicherweise einen Fehler im Push-Mechanismus selbst gefunden. Lesen Sie in diesem Fall den Abschnitt Fehlerberichte erstellen, um einen guten Fehlerbericht mit allen erforderlichen Informationen einzureichen, um die Fehlerbehebung zu beschleunigen.

Bevor wir beginnen, möchte ich darauf hinweisen, dass Firefox und der Mozilla AutoPush-Dienst sehr gute Fehlermeldungen haben. Wenn Sie nicht weiterkommen und das Problem nicht kennen, testen Sie es in Firefox und sehen Sie nach, ob Sie eine hilfreichere Fehlermeldung erhalten.

Probleme mit der Autorisierung

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

Die einfachste Möglichkeit, Push-Vorgänge in Firefox und Chrome zu unterstützen, besteht darin, ein applicationServerKey im subscribe()-Aufruf anzugeben. Die Kehrseite ist, dass jede Diskrepanz zwischen Ihrem Frontend und den Schlüsseln des Servers zu einem Autorisierungsfehler führt.

In Chrome und FCM

Wenn Chrome FCM als Push-Dienst verwendet, erhalten Sie von FCM für eine Reihe verschiedener Fehler, die alle Anwendungsserverschlüssel betreffen, eine UnauthorizedRegistration-Antwort.

In den folgenden Situationen wird die Fehlermeldung UnauthorizedRegistration angezeigt:

  • Wenn in der Anfrage an FCM kein Authorization-Header definiert wird
  • Ihr Anwendungsschlüssel, der zum Abonnieren des Nutzers verwendet wurde, stimmt nicht mit dem Schlüssel überein, der zum Signieren des Autorisierungsheaders verwendet wurde.
  • Der Ablauf ist in deinem JWT ungültig, d.h., der Ablauf überschreitet 24 Stunden 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, sollten Sie sie in Firefox testen, um zu sehen, ob die Fehlermeldung mehr Informationen zum Problem liefert.

Firefox und Mozilla AutoPush

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

Außerdem erhalten Sie von Mozilla AutoPush die Fehlerantwort Unauthorized, wenn der Header Authorization 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 die Ablaufzeit in deinem JWT abgelaufen ist, wird auch der Fehler Unauthorized mit der Meldung angezeigt, 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, an dem der Nutzer abonniert wurde, und dem Zeitpunkt, an dem der Autorisierungsheader signiert wurde, unterscheiden, wird der Fehler Not Found 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“ ein unerwarteter Wert ist), wird der folgende Fehler von Mozilla AutoPush ausgegeben:

{
  "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 zu einem Nicht-201-Antwortcode von einem Push-Dienst führen können. Im Folgenden finden Sie eine Liste von HTTP-Statuscodes und deren Bedeutung in Bezug auf Web-Push.

Statuscode Beschreibung
429 Zu viele Anfragen: Ihr Anwendungsserver hat eine Ratenbegrenzung mit einem Push-Dienst erreicht. Die Antwort des Dienstes sollte einen „Repeat-After“-Header enthalten, der angibt, wie lange es dauert, bis eine weitere Anfrage gestellt werden kann.
400 Ungültige Anfrage. Einer der Header ist ungültig oder schlecht formatiert.
404 Nicht gefunden In diesem Fall sollten Sie das PushSubscription aus Ihrem Backend löschen und warten, bis die Möglichkeit besteht, den Nutzer erneut zu abonnieren.
410 Verschwunden. Das Abo ist nicht mehr gültig und sollte aus Ihrem Backend entfernt werden. Dies kann durch Aufrufen von „unsubscribe()“ für ein PushSubscription reproduziert werden.
413 Die Nutzlast ist zu groß. Die Mindestnutzlast, die ein Push-Dienst unterstützen muss, beträgt 4.096 Byte (oder 4 KB). Größere Werte 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 Web-Push-Protokoll-Spezifikation, ob der Statuscode referenziert wird. Außerdem wird angegeben, wann dieser Statuscode 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 einen 201-Antwortcode erhalten), das Push-Ereignis jedoch nie in Ihrem Service Worker ausgelöst wird, bedeutet dies normalerweise, dass der Browser die empfangene Nachricht nicht entschlüsseln konnte.

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

Firefox-Entwicklertools mit Entschlüsselungsnachricht.

So überprüfen Sie, ob dieses Problem in Chrome vorliegt:

  1. Gehen Sie zu about://gcm-internals und klicken Sie auf die Schaltfläche "Aufzeichnung starten".

GCM-Eintrag für Chrome intern.

  1. Lösen Sie eine Push-Nachricht aus und sehen Sie unter dem "Fehlerprotokoll bei der Nachrichtenentschlüsselung" nach.

GCM-Entschlüsselungsprotokoll

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

In diesem Fall gibt es einige Tools, die Ihnen beim Debuggen der Verschlüsselung helfen können:

Verbindungsproblem

Wenn Sie kein Push-Ereignis in Ihrem Service Worker empfangen 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“ (Nachrichtenprotokoll) (sic) in about://gcm-internals prüfen.

GCM-Interna empfangen das Nachrichtenprotokoll.

Wenn die Nachricht nicht rechtzeitig angezeigt wird, prüfen Sie, ob der Verbindungsstatus Ihres Browsers CONNECTED lautet:

GCM-Verbindungsstatus

Wenn es nicht „VERKNÜPFT“ ist, müssen Sie möglicherweise Ihr aktuelles Profil löschen und ein neues erstellen. Wenn das Problem dadurch nicht behoben wird, senden Sie bitte einen Fehlerbericht wie unten beschrieben.

Fehlerberichte werden gemeldet

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

Für Chrome würden Sie das Problem hier melden: https://bugs.chromium.org/p/chromium/issues/list In Firefox sollten Sie das Problem hier melden: https://bugzilla.mozilla.org/

Für einen guten Fehlerbericht sollten Sie die folgenden Informationen angeben:

  • Browser, in denen Sie getestet haben, z.B. Chrome-Version 50, Chrome-Version 51, Firefox-Version 50 und Firefox-Version 51.
  • Ein PushSubscription-Beispiel, das das Problem veranschaulicht.
  • Fügen Sie alle Beispielanfragen ein (d.h. Inhalte von Netzwerkanfragen an einen Push-Dienst, einschließlich Header).
  • Geben Sie auch Beispielantworten aus Netzwerkanfragen an.

Wenn Sie ein reproduzierbares Beispiel bereitstellen können, entweder Quellcode oder eine gehostete Website, kann dies die Diagnose und Lösung des Problems häufig beschleunigen.

Weitere Informationen

Code-Labs