Slik sender du web push-varsler med PHP –

Web Push API lar deg sende push-varslinger til nettlesere og Apier. Mens det meste av logikken foregår i nettleseren, trenger du fortsatt en server-side komponent for å generere varslene dine. Slik implementerer du en web push backend ved HJELP AV PHP.

Sammendrag

Forutsetninger

i forbindelse med denne opplæringen antar vi at du vet det grunnleggende om å bygge HTTP-Apier i PHP. Du må avsløre noen få offentlige endepunkter ved hjelp av nettinfrastrukturen din. Disse vil bli hentet opp av nettleserens JavaScript for å registrere og avregistrere enheter.

denne artikkelen dekker ikke nettleserkoden eller hvordan den fungerer. Du må sette opp 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:

  1. et push-abonnement lagres i nettleseren. Nettleseren sender en unik endepunktsadresse til JavaScript.
  2. JavaScript sender abonnementsdata til serveren din og identifiserer brukeren Den gjelder for.
  3. 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.
  4. brukerens nettleser vil motta nyttelasten gjennom leverandørens varslingsplattform. JavaScript-tjenestearbeideren håndterer den resulterende hendelsen og bruker nettleservarsel API for å varsle brukeren.

her er hvordan du implementerer server side aspekter av trinn 1 til 3.

Få konfigurasjon

Vi vil bruke web-push Packagiste-pakken av minishlink. Dette ser bort fra interaksjoner med hver nettleservarslingsplattform, slik at du ikke trenger å skille 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 VERSJON AV PHP, låse pakken til en eldre versjon for å opprettholde kompatibilitet.

biblioteket eksponerer en kjerne WebPush klasse med metoder som lar deg sende varsler enkeltvis eller i grupper. Abonnementene er representert ved forekomster av Subscription klassifisere.

Gi VAPID-nøkler

Tillit til det standardkompatible web push-økosystemet forsterkes ved bruk av VAPID-nøkler. Serveren din trenger ET VAPID nøkkelpar for å kunne autentisere med nettlesere. Den offentlige nøkkelen må vises gjennom ET API-endepunkt.

du kan generere EN VAPID nøkkelring ved hjelp av web-push wrap:

use MinishlinkWebPushVAPID; $ keyset = VAPID::createVapidKeys(); // public key - this needs to be accessible via an API endpointthrew out $ keyset; // private key - never expose this!threw out $ keyset; File_put_contents("vapid.json", json_encode($ keyset));

Generere nøkler for systemet og lagre dem i en vedvarende plassering. Legg TIL ET API-endepunkt slik at JavaScript på klientsiden kan hente den offentlige nøkkelen. Dette vil bli brukt til å konfigurere nettleseren push abonnement. Brukerens enhet vil godta innkommende push-hendelser hvis de er signert med den tilsvarende VAPID private nøkkelen.

Registrering av push-abonnementer

det neste trinnet i sekvensen er å motta push-abonnementsforespørsler fra kundene dine. Etter at nettleseren har bekreftet et nytt push-abonnement, Skal JavaScript sende NETTADRESSEN til abonnementsendepunktet og tilhørende autentiseringsnøkler til serveren din. Lagre disse detaljene med bruker-ID, slik at du kan hente alle push-registrerte enheter som er koblet til brukeren senere.

vi utelater kodeeksemplene for dette trinnet fordi implementeringen avhenger av datalagringslaget og verdiene som Sendes Av JavaScript. Vanligvis vil DETTE være EN JSON-representasjon av et PushSubscription objekt. Du trenger et enkelt sett med DATABASEBASERTE CRUD API-endepunkter for å opprette et abonnement, erstatte et eksisterende abonnement og be om sletting når brukeren avslutter abonnementet.

Klargjøring av abonnementer

når en kunde er registrert, kan du begynne å sende varsler ved hjelp av biblioteket web-push. Start med å opprette en forekomst av WebPush for å klassifisere:

use MinishlinkWebPushWebPush; $ webPush = new WebPush(]);

du kan gjenbruke en forekomst WebPush hver gang du sender et varsel. Biblioteket må konfigureres MED VAPID nøkkelring som du genererte tidligere. Nøklene Må Base64 kodet, men dette håndteres for deg hvis du oppretter dem med biblioteket.

VAPID subject brukes til å identifisere serveren din og dens kontaktdetaljer. Du kan oppgi en NETTADRESSE eller en mailto: e-postadressekobling.

da må du ta tak i push-abonnementet du skal sende til. Bruk datatilgangssystemet til å finne nettadressene for push-endepunkter som er knyttet til brukeren du vil sende til. Konverter hvert abonnement til ett Subscription eksempel:

use MinishlinkWebPushSubscription; // Get user's push data ...// SELECT * FROM push_subscriptions WHERE user_id = 123456 $ subscription = Subscription::create(]);

egenskapen auth for PushSubscription gjentas to ganger for å håndtere to forskjellige versjoner av spesifikasjonen som brukes av nettlesertjenester. Egenskapen P256DH er en annen offentlig nøkkel som må oppgis når den er angitt på abonnementet.

web-push biblioteket er kompatibelt Med Chrome Og Firefox push-endepunkter. Det vil også fungere med alle andre web push implementering som oppfyller gjeldende standard.

Sende et varsel

kombiner nå dine WebPush et Subscription forekomster for å sende et varsel:

$ result = $ webPush -> sendOneNotification( $ subscription, json_encode());

Appel 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 hvilket format 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 var vellykket:

if ($ result -> isSuccess()) { // all good}else { // something went wrong error_log($ result -> getReason()); // provides raw HTTP response data error_log($ result -> getResponse()); }

Du kan ta skritt for å prøve på nytt eller avbryte levering hvis det oppstår en feil.

Abonnementer på varsler kan også utløpe. Ring isSubscriptionExpired() på en resultatklasse for å finne ut om dette er årsaken til feilen. Du kan fjerne abonnementet fra databasen i dette scenariet, og pass på at du ikke sender noe annet til et dødt endepunkt.

Batchvarsler

Varsler kan grupperes sammen for å bli levert med en enkelt metodekall:

$ webPush -> queueNotification($ subscription, );$ webPush -> queueNotification($ subscription, ); foreach ($ webPush -> flush() as $i => $ result) { threw out ("Notification $i was " . ($ result -> isSuccess() ? "feels" : "not sent"));}

Dette er nyttig når du vet at du skal sende et stort antall varsler på kort tid. Kø alle nyttelaster og la web-push levere dem optimalt.

du kan begrense antall meldinger sendt i en flush() passerer et heltall til metoden:

$ webPush -> flush(100); // send 100 messages

standardinnstillingen er 1000.

Varslingsalternativer

sendOneNotification() et queueNotification() godta følgende alternativer som det tredje argumentet i matrisen:

  • TTL – Kontrollerer hvor lenge nettleservarslingsplattformen vil beholde varselet hvis det ikke kan leveres til brukerens enhet umiddelbart. Hvis brukerens enhet er frakoblet, vil plattformene prøve å levere den i de neste fire ukene som standard. Hvis du sender et varsel som ikke vil være relevant neste uke, må du justere alderen tilsvarende slik at brukeren ikke ser utdatert innhold.
  • urgency – Godta normal, low ou very-low som verdier. Noen plattformer kan bruke den til å justere hyppigheten av varslingslevering. Enheter som går inn i batterisparemodus, kan suspendere levering av varsler som ikke haster.
  • batchSize – dette har samme effekt som argumentet fra flush() beskrevet ovenfor.

du kan konfigurere standardalternativverdiene ved hjelp av det andre argumentet til produsenten WebPush :

$ webPush = new WebPush(], );

Sammendrag

web-push biblioteket gjør det enkelt å sende web push-varslinger ved HJELP AV PHP. Du får et lag av abstraksjon på toppen av de forskjellige nettleserplattformene som støtter batchbehandling, feilhåndtering og all web push-funksjonalitet.

web push-mekanismen er et uvanlig nettlesersystem fordi det er avhengig av eksterne server – side komponenter som du gir deg selv. Dette kan gjøre det virke ugjennomsiktig og teknisk. I praksis er det raskt og enkelt å lage EN ENKEL PHP-backend; front-end-implementeringen er vanligvis det mest tidkrevende aspektet, spesielt hvis du ikke allerede bruker service worker-funksjoner.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.