miten lähettää Web Push-ilmoituksia PHP

PHP Logo

Web Push API: n avulla voit lähettää push-ilmoituksia web-selaimiin ja sovellusliittymiin. Vaikka suurin osa logiikasta tapahtuu selaimessa, tarvitset silti palvelinpuolen komponentin ilmoitusten tuottamiseen. Näin toteuttaa Web Push backend PHP.

Edeltävät opinnot

tätä opetusohjelmaa varten oletamme, että tunnet HTTP-sovellusliittymien luomisen perusteet PHP: ssä. Sinun täytyy paljastaa muutamia julkisia päätepisteitä käyttämällä web framework. Näitä kutsutaan selaimen JavaScript rekisteröityä ja perua laitteita.

tämä artikkeli ei koske selainpuolen koodiin tai sen toimintaan. Sinun täytyy koota palvelutyöntekijä, joka vastaa saapuviin push-tapahtumiin ja näyttää ilmoituksen käyttäjälle.

kovassa nosteessa Web Push flow näyttää tältä:

  1. push-tilaus on rekisteröity selaimeen. Selain antaa ainutlaatuisen päätepisteen URL-osoitteen JavaScriptille.
  2. JavaScript lähettää tilaustiedot palvelimellesi ja tunnistaa käyttäjän, jota se koskee.
  3. kun taustaosan on lähetettävä push-ilmoitus, luo hyötykuorma ja lähetä se päätepisteen URL-osoitteeseen, joka on ilmoitettu osana tilaustietoja.
  4. käyttäjän selain Vastaanottaa hyötykuorman toimittajan ilmoitustoimitusalustan kautta. JavaScript-palvelusi työntekijä hoitaa tapahtuman ja käyttää selaimen ilmoitusrajapintaa käyttäjän hälyttämiseen.

näin toteutat vaiheiden 1-3 palvelinpuolen näkökohdat.

get Setup

käytämme minishlinkin web-push Packagist-pakettia. Tämä abstrahoi vuorovaikutukset kunkin selaimen ilmoitusalustan kanssa, joten sinun ei tarvitse manuaalisesti erottaa päätetyyppejä.

lisää paketti projektiin käyttäen säveltäjää:

composer require minishlink/web-push
Mainos

uusimman version käyttöön tarvitaan PHP 7.2 tai uudempigmp, mbstring, curl, ja openssl laajennukset. Jos sinun on käytettävä vanhempaa PHP-julkaisua, Lukitse paketti aikaisempaan versioon yhteensopivuuden säilyttämiseksi.

kirjasto paljastaa ytimen WebPush luokan menetelmin, joiden avulla ilmoituksia voi lähettää yksittäin tai erinä. Tilausmääriä edustavat Subscription – luokan tapaukset.

Vapid-avainten tarjoaminen

luottamus standardien mukaiseen Web Push-ekosysteemiin toteutetaan käyttämällä VAPID-avaimia. Palvelin tarvitsee VAPID-avainparin, jotta se voi todentaa itsensä selaimiin. Julkinen avain on altistettava API-päätepisteen kautta.

voit luoda vapid-näppäinsarjan käyttämällä web-push – pakettia:

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));

luo avaimet järjestelmään ja tallentaa ne pysyvään paikkaan. Lisää API päätepiste niin asiakaspuolen JavaScript voi hakea julkisen avaimen. Tätä käytetään selaimen push-tilauksen määrittämiseen. Käyttäjän laite hyväksyy saapuvat push-tapahtumat, jos ne on allekirjoitettu vastaavalla VAPID – yksityisavaimella.

Push-Tilausten rekisteröinti

seuraava vaihe järjestyksessä on push-tilauspyyntöjen vastaanottaminen asiakkailtasi. Kun selain on vahvistanut uuden push-tilauksen, JavaScriptin pitäisi lähettää tilauksen päätepisteen URL ja siihen liittyvät todennusavaimet palvelimellesi. Säilytä nämä tiedot käyttäjän tunnuksen rinnalla, jotta voit hakea kaikki käyttäjään linkitetyt push-rekisteröidut laitteet myöhemmin.

Mainos

jätämme koodinäytteet pois tästä vaiheesta, koska toteutus riippuu tallennustasostasi ja JavaScriptin lähettämistä arvoista. Tyypillisesti tämä on PushSubscription olion JSON-esitys. Tarvitset yksinkertaisen joukon tietokannan tukemia CRUD API-päätepisteitä luodaksesi tilauksen, korvataksesi olemassa olevan ja pyytääksesi poistoa, kun käyttäjä peruuttaa tilauksen.

liittymien valmistelu

kun asiakas on rekisteröitynyt onnistuneesti, voit aloittaa ilmoitusten lähettämisen käyttämällä web-push kirjastoa. Aloita luomalla WebPush – luokan instanssi:

use Minishlink\WebPush\WebPush; $webPush = new WebPush(]);

voit käyttää uudelleen yhden WebPush instanssin joka kerta, kun lähetät ilmoituksen. Kirjasto on määritettävä aiemmin luomallasi vapid-näppäinasetuksella. Avaimet pitäisi koodata Base64: ksi, mutta tämä hoidetaan puolestasi, jos luot ne kirjaston avulla.

Vapidia subject käytetään palvelimen ja sen yhteystietojen tunnistamiseen. Voit antaa verkkosivun URL-osoitteen tai mailto: sähköpostiosoitteen linkin.

Seuraavaksi sinun täytyy hakea push-tilaus, johon lähetät. Käytä tietojen käyttöoikeusjärjestelmääsi hakeaksesi push endpoint-URL-osoitteet, jotka liittyvät käyttäjään, jolle haluat lähettää. Muunna jokainen tilaus Subscription – instanssiin:

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

auth PushSubscription ominaisuus toistetaan kahdesti, jotta selainpalveluiden käyttämästä spec: stä selviää kaksi eri versiota. P256dh-ominaisuus on toinen julkinen avain, joka tulee toimittaa, kun se asetetaan liittymään.

web-push kirjasto on yhteensopiva Chrome-ja Firefox push-päätelaitteiden kanssa. Se toimii myös muiden Web Push-toteutusten kanssa, jotka täyttävät nykyisen standardin.

Ilmoituksen lähettäminen

Yhdistä nyt WebPush ja Subscription instanssisi ilmoituksen lähettämiseksi:

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

Soitto sendOneNotification() tarjoaa välittömän toimituksen yksittäiselle ilmoitukselle. Hyötykuorma tässä tapauksessa on JSON-koodattu ryhmä, jolla on kaksi ominaisuutta. Se on sinusta kiinni, mitä tietoja lähetät ja muoto käytät – JavaScript-asiakas vastaanottaa sen sellaisenaan ja voi tulkita sitä tarpeen mukaan.

Ilmoituksen lähettäminen palauttaa tulosluokan, jonka avulla voit tarkistaa, onnistuiko operaatio:

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

voit yrittää uudelleen tai peruuttaa toimituksen, Jos virhe ilmenee.

ilmoitus

Ilmoitusmerkinnät voivat myös vanhentua. Soita isSubscriptionExpired() – menetelmällä tulosluokkaan ja selvitä, onko tämä epäonnistumisen syy. Voit poistaa tilauksen tietokannastasi tässä skenaariossa varmistaen, ettet lähetä mitään muuta umpikujaan.

Eräilmoitukset

ilmoitukset voidaan koota yhteen toimitettavaksi yhdellä menetelmäkutsulla:

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

tämä on hyödyllistä, kun tiedät, että lähetät suuren määrän ilmoituksia lyhyessä ajassa. Jonota kaikki hyötykuormasi ja anna web-push toimittaa ne optimaalisella tavalla.

lähetettyjen ilmoitusten määrää voi rajoittaa yhdellä flush() siirtämällä menetelmään kokonaisluvun:

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

oletusarvo on 1000.

Ilmoitusvaihtoehdot

sendOneNotification() ja queueNotification() hyväksyvät seuraavat vaihtoehdot kolmannen rivin argumentiksi:

  • TTL – määrittää, kuinka kauan selaimen ilmoitusalusta pitää kiinni ilmoituksesta, jos sitä ei voida siirtää käyttäjän laitteelle heti. Jos käyttäjän laite on offline, alustat oletuksena yrittää toimittaa sitä seuraavan neljän viikon ajan. Jos lähetät ilmoituksen, jolla ei ole merkitystä ensi viikolla, säädä TTL vastaavasti, jotta käyttäjä ei näe vanhentunutta sisältöä.
  • urgency – Hyväksyy normal, low tai very-low arvoiksi. Jotkin alustat saattavat käyttää tätä ilmoitusten toimitustiheyden säätämiseen. Laitteet, jotka siirtyvät akun säästötilaan, voivat keskeyttää ei-kiireellisten ilmoitusten toimittamisen.
  • batchSize – tällä on sama vaikutus kuin edellä kuvatulla argumentilla flush().

voit määrittää oletusasetukset käyttämällä toista argumenttia WebPush rakentajalle:

$webPush = new WebPush(], );

Yhteenveto

web-push – kirjaston avulla on helppo lähettää Web Push-ilmoituksia PHP: n avulla. Eri selainalustojen päällä on abstraktiokerros, joka tukee erittelyä, virheiden käsittelyä ja kaikkia Web Push-ominaisuuksia.

Mainos

Web Push-mekanismi on epätavallinen selainjärjestelmä, koska se on riippuvainen etäpalvelinpuolen komponenteista, joita toimitat itse. Tämä voi saada sen näyttämään vaikeaselkoiselta ja tekniseltä. Käytännössä yksinkertaisen PHP-taustajärjestelmän luominen on nopeaa ja helppoa; frontend-toteutus on yleensä aikaa vievä näkökohta, varsinkin jos et jo käytä service worker-ominaisuuksia.

Leave a Reply