layout | parent | nav_order | title |
---|---|---|---|
default |
Onderdelen |
1 |
Web Push |
Dit is het protocol die de stek gebruikt om push berichten te sturen naar de browsers van leden.
De Frontend is nogal gecompliceerd, omdat er veel bij komt kijken. Zie web.dev voor een uitgebreide uitleg van de flow en ontwerpen van web push notificaties. Ook het MDN artikel over Push API is heel handig.
- Check of Push API beschikbaar is
- Gebruiker selecteert 'ja' op push berichten op
/instellingen#instelling-forum
- Gebruiker staat notificaties toe in de browser
- Check of er een bestaand abonnement is
- Abonnement wordt aangemaakt voor de browser
- Informatie over de browser (
client_endpoint
enclient_keys
) worden naar database verstuurd - Gebruiker vraagt om berichten op
/instellingen#instelling-forum
of in een draad/deel - Bij een bericht wordt de
ServiceWorker
uit/sw.js
in de browser geactiveerd door de web-push library in de stek (Zie het MDN artikel over Service Worker API voor meer over ServiceWorkers) - De
ServiceWorker
van de browser rendert een push-notificatie
De Backend werkt voor nu met een web-push library in PHP. Zie web-push-php
voor meer info en documentatie.
De flow van de backend is vrij minimalistisch. De client_endpoint
en client_keys
worden met een uid
die naar een profiel linkt opgeslagen in de push_abbonement
tabel in de database. Elke keer dat een lid een bericht moet krijgen wordt de informatie opgezocht aan de hand van de uid
en dan wordt er een push bericht aangemaakt en verstuurd. Dit gebeurt allemaal in de ForumMeldingenService
. Het format van het bericht is vrij specifiek, want het moet worden opgevangen door de ServiceWorker
in de frontend. Als er iets mis is, komt het bericht niet aan.
De Web Push library werkt niet standaard bij een lokale installatie, want er moeten eerst nog een paar VAPID sleutels gegenereerd worden. Zie de documentatie van de library voor info over het genereren van de VAPID sleutels. Plaats deze sleutels in .env.local
bij de passende variabelen:
VAPID_PUBLIC_KEY=
VAPID_PRIVATE_KEY=