Slik Sender Du Web Push-Varsler MED PHP
Web Push API lar deg sende push-varsler til nettlesere og Apier. Mens det meste av logikken skjer i nettleseren, trenger du fortsatt en server-side komponent for å generere varslene dine. Slik implementerer Du En Web Push backend ved HJELP AV PHP.
Forutsetninger
i forbindelse med denne opplæringen antar vi at du er kjent med grunnleggende OM å lage HTTP-Apier i PHP. Du må avsløre noen få offentlige endepunkter ved hjelp av webrammen. Disse vil bli kalt Av JavaScript I nettleseren Din for å registrere og avregistrere enheter.
Denne artikkelen berører ikke nettleserkoden eller hvordan den fungerer. Du må sette sammen en servicearbeider som svarer på innkommende push-hendelser og viser et varsel til brukeren.
På et høyt nivå ser Web Push flow ut som dette:
- et push-abonnement er registrert i nettleseren. Nettleseren utsteder en unik endepunktsadresse Til JavaScript.
- JavaScript sender abonnementsdataene til serveren din og identifiserer brukeren Den gjelder for.
- når backend må sende et push-varsel, oppretter du en nyttelast og sender DEN til nettadressen for endepunktet som er rapportert som en del av abonnementsdataene.
- brukerens nettleser vil motta nyttelasten via leverandørens varslingsplattform. JavaScript-tjenestearbeideren håndterer den påfølgende hendelsen og bruker nettleserens varslings-API for å varsle brukeren.
slik implementerer du serversiden i trinn 1 til 3.
Få Oppsett
Vi bruker Pakken web-push
Packagist av minishlink. Dette oppsummerer samhandlingene med hver nettleservarslingsplattform, slik at du ikke trenger å skille mellom endepunkttyper manuelt.
Legg til pakken i prosjektet ved Hjelp Av Komponist:
composer require minishlink/web-push
for å bruke den nyeste versjonen, trenger DU PHP 7.2 eller høyere med gmp
, mbstring
, curl
, og openssl
utvidelser. Hvis DU må bruke EN ELDRE PHP-utgivelse, låser du pakken til en tidligere versjon for å opprettholde kompatibiliteten.
biblioteket eksponerer en kjerne WebPush
klasse med metoder som lar deg sende varsler enkeltvis eller som grupper. Abonnementer er representert ved forekomster av klassen Subscription
.
Å Gi VAPID-Nøkler
Tillit Til Det standardkompatible Web Push-økosystemet håndheves ved bruk av VAPID-nøkler. Serveren din trenger ET VAPID nøkkelpar, slik at det kan autentisere seg til nettlesere. Den offentlige nøkkelen skal eksponeres via ET API-endepunkt.
du kan generere ET VAPID-nøkkelsett ved hjelp av web-push
– pakken:
use Minishlink\WebPush\VAPID; $keyset = VAPID::createVapidKeys(); // public key - this needs to be accessible via an API endpointecho $keyset; // private key - never expose this!echo $keyset; file_put_contents("vapid.json", json_encode($keyset));
Generere nøkler for systemet og lagre dem til en vedvarende plassering. Legg TIL ET API-endepunkt slik At JavaScript på klientsiden kan hente den offentlige nøkkelen. Dette vil bli brukt til å sette opp nettleserens push-abonnement. Brukerens enhet vil godta innkommende push-hendelser hvis de har blitt signert med den tilsvarende VAPID private nøkkelen.
Registrere Push-Abonnementer
det neste trinnet i sekvensen er å motta push-abonnementsforespørsler fra kundene dine. Når nettleseren har bekreftet et nytt push-abonnement, Skal JavaScript sende abonnementets endepunktsadresse og tilhørende autentiseringsnøkler til serveren din. Lagre disse detaljene sammen med brukerens ID, slik at du kan hente alle push-registrerte enheter som er koblet til brukeren senere.
vi utelater kodeeksempler for dette trinnet da implementeringen avhenger av datalagringslaget ditt og verdiene JavaScript sender opp. Vanligvis vil DETTE være EN JSON-representasjon av et PushSubscription
– objekt. Du trenger et enkelt sett MED DATABASESTØTTEDE CRUD API-endepunkter for å opprette et abonnement, erstatte et eksisterende, og be om sletting når brukeren avslutter abonnementet.
Klargjøre Abonnementer
når en klient er registrert, kan du begynne å sende varsler ved hjelp av biblioteket web-push
. Begynn med å opprette en forekomst av klassen WebPush
:
use Minishlink\WebPush\WebPush; $webPush = new WebPush(]);
du kan gjenbruke en forekomst WebPush
hver gang du sender et varsel. Biblioteket må konfigureres MED VAPID-nøkkelsettet du genererte tidligere. Nøkler skal kodes Som Base64, men dette håndteres for deg hvis du lager dem med biblioteket.
VAPID subject
brukes til å identifisere serveren din og dens kontaktdetaljer. Du kan angi en webadresse ELLER en mailto:
e-postadresse link.
Neste må du hente push-abonnementet du skal sende til. Bruk datatilgangssystemet til å slå opp push-endepunktsadressene som er knyttet til brukeren du vil sende til. Konvertere hvert abonnement til en forekomst Subscription
:
use Minishlink\WebPush\Subscription; // Get user's push data...// SELECT * FROM push_subscriptions WHERE user_id = 123456 $subscription = Subscription::create(]);
auth
egenskapen til PushSubscription
gjentas to ganger for å takle to forskjellige versjoner av spesifikasjonen som brukes av nettlesertjenester. P256dh-egenskapen er en annen offentlig nøkkel som skal leveres når den er angitt på abonnementet.
web-push
biblioteket er kompatibelt Med Push-endepunkter For Chrome og Firefox. Det vil også fungere med alle Andre Web Push implementering som oppfyller gjeldende standard.
Sende Et Varsel
kombiner nå forekomstene dine WebPush
og Subscription
for å sende et varsel:
$result = $webPush -> sendOneNotification( $subscription, json_encode());
Ringe sendOneNotification()
gir umiddelbar levering for en enkelt melding. Nyttelasten i dette tilfellet ER EN JSON-kodet array med to egenskaper. Det er opp til deg hvilke data du sender og formatet du bruker – JavaScript-klienten mottar Det som det er og kan tolke det etter behov.
Sende et varsel returnerer en resultatklasse som lar deg kontrollere om operasjonen lyktes:
if ($result -> isSuccess()) { // all good}else { // something went wrong error_log($result -> getReason()); // provides raw HTTP response data error_log($result -> getResponse()); }
Du kan iverksette tiltak for å prøve på nytt eller avbryte leveransen hvis det oppstår en feil.
Varslingsabonnementer kan også utløpe. Ring isSubscriptionExpired()
– metoden på en resultatklasse for å finne ut om dette er årsaken til feilen. Du kan slette abonnementet fra databasen i dette scenariet, slik at du ikke sender noe annet til et dødt endepunkt.
Batching Varslinger
Varslinger kan batchesammen for levering med en metode samtale:
$webPush -> queueNotification($subscription, );$webPush -> queueNotification($subscription, ); foreach ($webPush -> flush() as $i => $result) { echo ("Notification $i was " . ($result -> isSuccess() ? "sent" : "not sent"));}
Dette er nyttig når du vet at du skal sende et stort antall varsler i løpet av kort tid. Kø alle nyttelaster og la web-push
levere dem på optimal måte.
du kan begrense antall meldinger sendt i en enkelt flush()
ved å sende et heltall til metoden:
$webPush -> flush(100); // send 100 messages
standardverdien er 1000
.
Varslingsalternativer
sendOneNotification()
og queueNotification()
godta følgende alternativer som et tredje matriseargument:
-
TTL
– Kontrollerer hvor lenge nettleserens varslingsplattform vil holde på varselet hvis det ikke kan sendes til brukerens enhet umiddelbart. Hvis brukerens enhet er frakoblet, er plattformer standard for å prøve å levere den i de neste fire ukene. Hvis du sender et varsel som ikke vil være relevant neste uke, må du justere TTL tilsvarende slik at brukeren ikke ser utdatert innhold. -
urgency
– Godtarnormal
,low
ellervery-low
som verdier. Noen plattformer kan bruke dette til å justere hyppigheten av varslingslevering. Enheter som går inn i en batterisparemodus, kan suspendere levering av varsler som ikke haster. -
batchSize
– dette har samme effekt som argumentet tilflush()
beskrevet ovenfor.
du kan konfigurere standardvalgverdier ved hjelp av det andre argumentet til konstruktøren WebPush
:
$webPush = new WebPush(], );
Sammendrag
web-push
biblioteket gjør det enkelt å sende Web Push-varsler ved HJELP AV PHP. Du får et abstraksjonslag på toppen av de ulike nettleserplattformene som støtter batching, feilhåndtering og alle Web Push-funksjoner.
Web Push mechanism Er en uvanlig nettleser system som det er avhengig av eksterne server-side komponenter du leverer selv. Dette kan gjøre det virke ugjennomsiktig og teknisk. I praksis er det raskt og enkelt å lage EN ENKEL PHP-backend; frontend-implementeringen er vanligvis det mer tidkrevende aspektet, spesielt hvis du ikke allerede bruker service worker-funksjoner.
Leave a Reply