miten lähettää Web Push-ilmoituksia PHP
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ä:
- push-tilaus on rekisteröity selaimeen. Selain antaa ainutlaatuisen päätepisteen URL-osoitteen JavaScriptille.
- JavaScript lähettää tilaustiedot palvelimellesi ja tunnistaa käyttäjän, jota se koskee.
- kun taustaosan on lähetettävä push-ilmoitus, luo hyötykuorma ja lähetä se päätepisteen URL-osoitteeseen, joka on ilmoitettu osana tilaustietoja.
- 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
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.
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(]);
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.
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äksyynormal
,low
taivery-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 argumentillaflush()
.
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.
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