Jak działają powiadomienia Web Push od strony wewnętrznej

Widzisz powiadomienia o nowych wiadomościach, aktualizacjach zamówień lub przypomnieniach o płatnościach.

Wygląda to prosto. Twój backend wysyła wiadomość, a użytkownik ją otrzymuje.

W rzeczywistości proces ten angażuje wiele elementów. Twój backend nigdy nie komunikuje się bezpośrednio z przeglądarką. Zamiast tego korzysta z usługi Push Service.

Google Chrome korzysta z Firebase Cloud Messaging. Firefox korzysta z Mozilla Push Service.

Przepływ pracy wygląda następująco:

Backend → Push Service → Przeglądarka → Service Worker → Użytkownik

Oto jak zbudować taki system przy użyciu React i Golang.

Komponenty

  1. Frontend (React): Prosi o uprawnienia i rejestruje Service Worker.
  2. Service Worker: Skrypt działający w tle, który żyje w przeglądarce. Obsługuje zdarzenia nawet wtedy, gdy Twoja strona internetowa jest zamknięta.
  3. Backend (Golang): Przechowuje subskrypcje i wysyła zaszyfrowane wiadomości.
  4. Push Service: Pośrednik, który dostarcza wiadomość do przeglądarki.

Przepływ subskrypcji

Aby wysłać wiadomość, potrzebujesz subskrypcji.

  • Użytkownik udziela uprawnień.
  • Przeglądarka generuje obiekt subskrypcji zawierający endpoint oraz klucze bezpieczeństwa.
  • Twoja aplikacja React wysyła ten obiekt do Twojego backendu w Golang.
  • Twój backend zapisuje go w bazie danych.

Musisz używać kluczy VAPID, aby zidentyfikować swój serwer. Użyj klucza publicznego dla frontendu i klucza prywatnego dla backendu. Nigdy nie udostępniaj swojego klucza prywatnego.

Implementacja

W React rejestrujesz Service Worker, aby nasłuchiwał zdarzeń push. Ten worker działa w tle. Odbiera dane i wyświetla powiadomienie użytkownikowi.

W Golang używasz biblioteki do obsługi szyfrowania i uwierzytelniania VAPID. Twój serwer odczytuje subskrypcję z bazy danych, szyfruje payload i wysyła go do usługi push przeglądarki.

Skalowanie do produkcji

Prosta konfiguracja sprawdza się w małych projektach. Duży system wymaga czegoś więcej.

  • Obsługa wielu urządzeń: Jeden użytkownik może mieć telefon i laptop. Przechowuj wiele subskrypcji na jednego użytkownika.
  • Czyszczenie danych: Subskrypcje wygasają. Jeśli otrzymasz błąd 404 lub 410, usuń tę subskrypcję z bazy danych.
  • Używaj kolejek: Dla milionów użytkowników użyj Kafki lub podobnego narzędzia. Pozwala to systemowi przetwarzać powiadomienia asynchronicznie.
  • Wdróż ponawianie prób: Użyj mechanizmu exponential backoff, aby radzić sobie z awariami sieci.

WebSockets są dobre do czatów na żywo, gdy użytkownik jest aktywny. Web Push jest lepszy do docierania do użytkowników, gdy karta jest zamknięta.

Źródło: https://dev.to/chandu_bobbili_06/how-web-push-notifications-work-internally-implementing-with-react-golang-6m