Gdy napotkasz problem z powiadomieniami push w internecie, może być trudno go debugować lub znaleźć pomoc. W tym dokumencie opisano niektóre typowe problemy i czynności, które należy wykonać, jeśli znajdziesz błąd w Chrome lub Firefoksie.
Zanim przejdziemy do debugowania powiadomień push, możesz napotkać problemy z debugowaniem skryptów service worker, nieaktualizowaniem pliku, niepowodzeniem rejestracji lub ogólnie nietypowym zachowaniem. Jeśli dopiero zaczynasz pracę z skryptami service worker, zdecydowanie zalecamy zapoznanie się z świetnym dokumentem na temat debugowania skryptów service worker.
Podczas tworzenia i testowania powiadomień push w internecie należy sprawdzić 2 etapy, z których każdy ma własny zestaw typowych problemów:
- Wysyłanie wiadomości: upewnij się, że wiadomości są wysyłane prawidłowo.
Powinien wyświetlić się kod HTTP 201. Jeśli nie jesteś:
- Sprawdź, czy nie występują błędy autoryzacji: jeśli pojawi się komunikat o błędzie autoryzacji, zapoznaj się z sekcją dotyczącą problemów z autoryzacją.
- Inne błędy interfejsu API: jeśli otrzymasz odpowiedź z kodem stanu innym niż 201, zapoznaj się z sekcją dotyczącą kodów stanu HTTP, aby dowiedzieć się, co mogło spowodować problem.
- Odbieranie wiadomości: jeśli udało Ci się wysłać wiadomość, ale nie została ona odebrana w przeglądarce:
- Sprawdź, czy nie występują problemy z szyfrowaniem: zapoznaj się z sekcją Problemy z szyfrowaniem ładunku.
- Sprawdź, czy nie ma problemów z połączeniem: jeśli problem występuje w Chrome, może to być problem z połączeniem. Więcej informacji znajdziesz w sekcji Problemy z połączeniem.
Jeśli nie możesz wysyłać i odbierać wiadomości push, a odpowiednie sekcje w tym dokumencie nie pomagają w rozwiązaniu problemu, być może udało Ci się znaleźć błąd w samym mechanizmie push. W takim przypadku zapoznaj się z sekcją Zgłaszanie błędów, aby przesłać prawidłowy raport o błędzie zawierający wszystkie niezbędne informacje, co przyspieszy proces naprawiania błędu.
Zanim zaczniemy, warto wspomnieć, że Firefox i usługa Mozilla AutoPush mają świetne komunikaty o błędach. Jeśli utkniesz i nie będziesz wiedzieć, na czym polega problem, przetestuj kod w Firefoksie i sprawdź, czy pojawi się bardziej pomocny komunikat o błędzie.
Problemy z autoryzacją
Problemy z autoryzacją to jedne z najczęstszych problemów, z którymi borykają się deweloperzy, gdy zaczynają korzystać z powiadomień push w przeglądarce. Zwykle jest to problem z konfiguracją kluczy serwera aplikacji (nazywanych też kluczami VAPID) witryny.
Najprostszym sposobem na obsługę powiadomień push zarówno w Firefoksie, jak i Chrome jest podanie applicationServerKey w wywołaniu subscribe(). Wadą jest to, że każda rozbieżność między kluczami frontendu i serwera spowoduje błąd autoryzacji.
W Chrome i FCM
W przypadku Chrome, która używa FCM jako usługi push, otrzymasz odpowiedź UnauthorizedRegistration z FCM dotyczącą różnych błędów, które dotyczą kluczy serwera aplikacji.
Błąd UnauthorizedRegistration pojawi się w tych sytuacjach:
- Jeśli nie zdefiniujesz nagłówka
Authorizationw żądaniu do FCM. - Klucz aplikacji użyty do zasubskrybowania użytkownika nie jest zgodny z kluczem użytym do podpisania nagłówka autoryzacji.
- Data ważności w tokenie JWT jest nieprawidłowa, tzn. przekracza 24 godziny lub token JWT wygasł.
- Token JWT jest nieprawidłowo sformatowany lub zawiera nieprawidłowe wartości.
Pełna odpowiedź z błędem 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, spróbuj przeprowadzić test w Firefoksie, aby uzyskać więcej informacji o problemie.
Firefox i Mozilla AutoPush
Firefox i Mozilla AutoPush wyświetlają przyjazne komunikaty o błędach w przypadku problemów z Authorization.
Jeśli w żądaniu push nie ma nagłówka Authorization, otrzymasz też odpowiedź o błędzie Unauthorized z Mozilla AutoPush.
{
"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 token JWT wygasł, również otrzymasz błąd Unauthorized z komunikatem wyjaśniającym, że token wygasł.
{
"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 różnią się między momentem, w którym użytkownik został zasubskrybowany, a momentem podpisania nagłówka Authorization, zostanie zwrócony błąd Not Found:
{
"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 w tokenie JWT znajduje się nieprawidłowa wartość (np. wartość „alg” jest nieoczekiwana), otrzymasz od Mozilla AutoPush ten błąd:
{
"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ą powodować, że usługa push zwraca kod odpowiedzi inny niż 201. Poniżej znajdziesz listę kodów stanu HTTP i ich znaczenie w odniesieniu do powiadomień push w internecie.
| Kod stanu | Opis |
|---|---|
| 429 | Zbyt wiele żądań. Serwer aplikacji osiągnął limit liczby żądań w usłudze push. Odpowiedź z usługi powinna zawierać nagłówek „Retry-After”, który wskazuje, po jakim czasie można wysłać kolejne żądanie. |
| 400 | Nieprawidłowe żądanie. Jeden z nagłówków jest nieprawidłowy lub źle sformatowany. |
| 404 | Nie znaleziono. W takim przypadku należy usunąć PushSubscription z backendu i poczekać na możliwość ponownej subskrypcji użytkownika. |
| 410 | Usunięto. Subskrypcja nie jest już ważna i należy ją usunąć z backendu. Można to odtworzyć, wywołując funkcję `unsubscribe()` w obiekcie `PushSubscription`. |
| 413 | Rozmiar ładunku jest za duży. Minimalny rozmiar ładunku, który musi obsługiwać usługa push, to 4096 bajtów (lub 4 KB). Większe pliki mogą powodować ten błąd. |
Jeśli kodu stanu HTTP nie ma na tej liście, a komunikat o błędzie nie jest pomocny, sprawdź specyfikację protokołu Web Push, aby dowiedzieć się, czy kod stanu jest wymieniony wraz ze scenariuszem, w którym może być użyty.
Problem z szyfrowaniem ładunku
Jeśli uda Ci się wywołać wiadomość push (czyli wysłać wiadomość do usługi push w internecie i otrzymać kod odpowiedzi 201), ale zdarzenie push nigdy nie zostanie wywołane w skrypcie service worker, zwykle oznacza to, że przeglądarce nie udało się odszyfrować otrzymanej wiadomości.
W takim przypadku w konsoli narzędzi deweloperskich Firefoksa powinien pojawić się komunikat o błędzie, na przykład:

Aby sprawdzić, czy to jest przyczyną problemu w Chrome:
- Otwórz stronę about://gcm-internals i kliknij przycisk „Start Recording” (Rozpocznij nagrywanie).

- Wywołaj wiadomość push i sprawdź „Dziennik błędów odszyfrowywania wiadomości”.

Jeśli wystąpi problem z odszyfrowaniem ładunku, zobaczysz błąd podobny do tego, który wyświetla się powyżej. (Zwróć uwagę na komunikat AES-GCM decryption failed w kolumnie szczegółów).
Jeśli problem dotyczy szyfrowania, możesz go rozwiązać za pomocą kilku narzędzi:
- Narzędzie Push Encryption Verifier autorstwa Petera Beverloo.
- Web Push: Data Encryption Test Page by Mozilla
Problem z połączeniem
Jeśli nie otrzymujesz zdarzenia push w skrypcie service worker i nie widzisz żadnych błędów odszyfrowywania, przeglądarka może nie być w stanie połączyć się z usługą push.
W Chrome możesz sprawdzić, czy przeglądarka odbiera wiadomości, sprawdzając „Receive Message Log” (Dziennik odbierania wiadomości) w about://gcm-internals.

Jeśli wiadomość nie dotrze w odpowiednim czasie, sprawdź, czy stan połączenia przeglądarki to CONNECTED:

Jeśli nie jest to „POŁĄCZONO”, konieczne może być usunięcie bieżącego profilu i utworzenie nowego. Jeśli to nie rozwiąże problemu, prześlij zgłoszenie błędu zgodnie z poniższymi instrukcjami.
Zgłaszanie błędów
Jeśli żadne z powyższych rozwiązań nie pomogło i nie wiesz, co może być przyczyną problemu, zgłoś problem z przeglądarką, której dotyczy:
W przypadku Chrome problem możesz zgłosić tutaj: https://bugs.chromium.org/p/chromium/issues/list W przypadku Firefoksa problem możesz zgłosić tutaj: https://bugzilla.mozilla.org/
Aby zgłoszenie błędu było przydatne, powinno zawierać te informacje:
- Przeglądarki, w których przeprowadzono testy (np. Chrome w wersji 50, Chrome w wersji 51, Firefox w wersji 50, Firefox w wersji 51).
- Przykładowy element
PushSubscription, który obrazuje problem. - Dołącz przykładowe żądania (np. treść żądań sieciowych do usługi push, w tym nagłówki).
- Dołącz też przykładowe odpowiedzi na żądania sieciowe.
Jeśli możesz podać przykład, który można odtworzyć, np. kod źródłowy lub hostowaną witrynę, często przyspiesza to diagnozowanie i rozwiązywanie problemu.
Co dalej
- Internetowe powiadomienia push – omówienie
- Jak działa Push
- Subskrybowanie użytkownika
- Interfejs uprawnień
- Wysyłanie wiadomości za pomocą bibliotek Web Push
- Protokół Web Push
- Obsługa zdarzeń push
- Wyświetlanie powiadomienia
- Zachowanie powiadomień
- Typowe wzorce powiadomień
- Najczęstsze pytania dotyczące powiadomień push
- Typowe problemy i zgłaszanie błędów