Typowe problemy i zgłaszanie błędów

Gdy napotkasz problem z funkcją push, może być trudno go debugować lub znaleźć pomoc. W tym dokumencie opisujemy niektóre typowe problemy i opisujemy, co należy zrobić wykonaj te czynności, jeśli znajdziesz błąd w przeglądarce Chrome lub Firefox.

Zanim zagłębimy się w debugowanie push, mogą pojawić się problemy z debugowaniem. mechanizmy Service Worker, plik nie jest aktualizowany, nie udaje się zarejestrować lub co zwykle jest po prostu nietypowe. Istnieje doskonały dokument na temat debugowania service worker gorąco polecam, jeśli dopiero zaczynasz korzystać z tworzenie mechanizmów Service Worker.

Podczas programowania i testowania funkcji web push należy wykonać 2 czynności: z innymi typowymi problemami:

  • Wysyłanie wiadomości: sprawdź, czy wysyłanie wiadomości się udało. Powinien wyświetlić się kod HTTP 201. W przeciwnym razie :
    • Sprawdź błędy autoryzacji: jeśli otrzymasz autoryzację. Zapoznaj się z Sekcja Problemy z autoryzacją.
    • Inne błędy interfejsu API: jeśli otrzymasz odpowiedź z kodem stanu inny niż 201, zapoznaj się z sekcją Kody stanu HTTP dla wskazówek dotyczących przyczyny problemu.
  • Odbieranie wiadomości: jeśli możesz wysłać wiadomość, ale komunikat nie został odebrany w przeglądarce:

Jeśli nie możesz wysyłać i odbierać wiadomości push, a także odpowiednie sekcje podane w tym dokumencie nie pomagają w debugowaniu problemu, być może w trakcie w mechanizmie wypychania. W takim przypadku zapoznaj się z Przekazywanie zgłoszeń o błędach by przesłać dobry raport o błędzie ze wszystkimi niezbędnymi informacjami naprawianie błędów.

Zanim zaczniemy, chcę wspomnieć, że Firefox Usługa Mozilla AutoPush zawiera świetne komunikaty o błędach. Jeśli utkniesz, nie wiesz, na czym polega problem, użyj przeglądarki Firefox i sprawdź, czy by otrzymać bardziej pomocny komunikat o błędzie.

Problemy z autoryzacją

Problemy z autoryzacją to jeden z najczęstszych problemów na początku od web push. Zazwyczaj jest to problem z konfiguracją klucze serwera aplikacji (klucze VAPID) witryny .

Najprostszym sposobem obsługi push zarówno w Firefoksie, jak i w Chrome jest dodanie applicationServerKey w rozmowie subscribe(). Wadą jest to, wszelkie rozbieżności między kluczami interfejsu użytkownika i serwera będą powodować .

W Chrome i FCM

W przypadku Chrome, który używa FCM jako usługi push, otrzymasz wiadomość UnauthorizedRegistration odpowiedź z FCM dotycząca zakresu różnych czy występują błędy, które dotyczą kluczy serwera aplikacji.

UnauthorizedRegistration błąd wystąpi w: w sytuacjach:

  • Jeśli nie zdefiniujesz nagłówka Authorization w żądaniu wysyłanym do FCM.
  • Twój klucz aplikacji użyty do subskrypcji użytkownika nie jest zgodny z używanym kluczem aby podpisać nagłówek autoryzacji.
  • Data wygaśnięcia tokena JWT jest nieprawidłowa, tzn. przekracza 24 godziny lub token JWT wygasł.
  • Token JWT ma nieprawidłowy format lub zawiera nieprawidłowe wartości.

Pełna odpowiedź na błąd wygląda tak:

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

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

Jeśli w Chrome pojawi się ten komunikat o błędzie, przeprowadź test w przeglądarce Firefox, by zobaczyć, i źródeł informacji o problemie.

Firefox i Mozilla AutoPush

Przeglądarki Firefox i Mozilla AutoPush oferują łatwy zestaw komunikatów o błędach dla Authorization problemu.

Otrzymasz też odpowiedź o błędzie Unauthorized z Mozilla AutoPush, jeśli plik push nie zawiera nagłówka Authorization użytkownika.

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

Jeśli termin ważności tokena JWT wygaśnie, otrzymasz też Unauthorized błąd z komunikatem wyjaśniającym, że token zawiera wygasła.

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

Jeśli klucze serwera aplikacji są różne w zależności od tego, kiedy użytkownik zasubskrybowano, a po podpisaniu nagłówka autoryzacji Not Found , w przypadku których zostanie zwrócony błąd:

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

Jeśli token JWT zawiera nieprawidłową wartość (np. „alg”) jest nieoczekiwaną wartością), pojawi się następujący błąd od Mozilli Automatyczne wypychanie:

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

Kody stanów HTTP

Istnieje wiele problemów, które mogą spowodować wyświetlenie kodu odpowiedzi innego niż 201 w usługi push. Poniżej znajdziesz listę kodów stanu HTTP i ich znaczenia w relacji do web push.

Kod stanu Opis
429 Zbyt wiele żądań. Serwer aplikacji osiągnął limit liczby żądań z usługi push. Odpowiedź usługi powinna zawierać polecenie „Ponów próbę po” nagłówek do określić, po jakim czasie można przesłać kolejne żądanie.
400 Nieprawidłowe żądanie. Jeden z nagłówków jest nieprawidłowy lub źle sformatowany.
404 Nie znaleziono. W takim przypadku usuń subskrypcję PushSubscription z i poczekać na możliwość odnowienia subskrypcji.
410 Brak. Subskrypcja jest już nieważna i należy ją usunąć z w tle. Można to odtworzyć, wywołując funkcję „unsubscribe()” na `PushSubscription`.
413 Rozmiar ładunku jest zbyt duży. Minimalny rozmiar ładunku, jaki musi mieć usługa push obsługiwany rozmiar to 4096 bajtów (lub 4 kB). Ten błąd może spowodować użycie większych elementów.

Jeśli kodu stanu HTTP nie ma na tej liście, a komunikat o błędzie nie jest przydatny, zapoznaj się z protokołem Web Push Protocol specyfikację, aby sprawdzić, czy wskazywany jest kod stanu wraz ze scenariuszem, kiedy ten kod może i sposobu ich wykorzystania.

Problem z szyfrowaniem ładunku

Jeśli możesz wywołać komunikat push (np. wysłać wiadomość na stronie internetowej) usługi push i otrzymują kod odpowiedzi 201), ale zdarzenie push nigdy nie jest uruchamiane procesu service worker, zwykle oznacza to, że przeglądarka nie wykonała odszyfrować otrzymaną wiadomość.

W takim przypadku w Narzędziach deweloperskich w Firefoksie powinien pojawić się komunikat o błędzie. w konsoli tak:

Narzędzia deweloperskie w przeglądarce Firefox z wiadomością dotyczącą odszyfrowywania.

Aby sprawdzić, czy na tym polega problem w Chrome, wykonaj te czynności:

  1. Wejdź na about://gcm-internals i kliknij „Rozpocznij nagrywanie”. Przycisk

Rekord GCM Chrome.

  1. Aktywuj komunikat push i zajrzyj do sekcji „Dziennik niepowodzenia odszyfrowywania wiadomości”.

Dziennik odszyfrowywania wewnętrznych zmian GCM.

Jeśli wystąpił problem z odszyfrowaniem ładunku, wyświetli się komunikat o błędzie podobne do przedstawionej powyżej. (Zwróć uwagę na AES-GCM decryption failed w kolumnie szczegółów).

W przypadku Twojego problemu jest kilka narzędzi, które mogą pomóc w debugowaniu szyfrowania:

Problem z połączeniem

Jeśli nie otrzymujesz zdarzenia push w skrypcie service worker i nie jesteś wyświetlane są błędy odszyfrowywania, przeglądarka może mieć problemy z nawiązaniem połączenia usługi push.

Aby w Chrome sprawdzić, czy przeglądarka odbiera wiadomości, przejrzyj okno „Odbieraj dziennik wiadomości” (sic) w języku: about://gcm-internals.

Dziennik wiadomości otrzymują użytkownicy wewnętrzni GCM.

Jeśli wiadomość nie dotrze w odpowiednim czasie, upewnij się, stan połączenia Twojej przeglądarki to CONNECTED:

Stan połączenia wewnętrznego GCM.

Jeśli profil nie ma stanu „POŁĄCZONO”, konieczne może być usunięcie bieżącego profilu utwórz nową. Jeśli Problem nadal nie ustąpił. Prześlij raport o błędzie w proponowany poniżej sposób.

Zgłaszanie błędów związanych z przesyłaniem raportów

Jeśli żadna z tych odpowiedzi nie pomoże Ci rozwiązać problemu i nic nie wskazuje na to, Jeśli masz inny problem, zgłoś go w sprawie przeglądarki, w której problem z:

W przypadku Chrome problem należy zgłosić tutaj: https://bugs.chromium.org/p/chromium/issues/list W przypadku przeglądarki Firefox problem powinien dotyczyć: https://bugzilla.mozilla.org/

Aby raport o błędzie był rzetelny, podaj te informacje:

  • Przeglądarki, w których testowano funkcję (np. Chrome 50, Chrome 51, Firefox) (wersja 50, Firefox w wersji 51).
  • Przykładowy element PushSubscription ilustrujący problem.
  • Dołącz dowolne przykładowe żądania (tj. treść żądań sieciowych do przekazywania wraz z nagłówkami).
  • Dołącz też wszystkie przykładowe odpowiedzi z żądań sieciowych.

Jeśli możesz podać możliwy do odtworzenia przykład, może to być kod źródłowy lub hostowana witryna często przyspiesza zdiagnozowanie i rozwiązanie problemu.

Co dalej

Ćwiczenia z kodowania