Web Push API: n avulla voit lähettää push-ilmoituksia verkkoselaimiin ja sovellusliittymiin. Vaikka suurin osa logiikasta tapahtuu selaimessa, tarvitset silti palvelinpuolen komponentin ilmoitusten tuottamiseen. Tässä on miten toteuttaa web push backend PHP.
tiivistelmä
ennakkoehdot
tätä opetusohjelmaa varten oletamme, että tiedät HTTP-sovellusliittymien rakentamisen perusteet PHP: ssä. Sinun täytyy paljastaa muutamia julkisia päätepisteitä käyttämällä web-infrastruktuuria. Nämä kutsutaan ylös selaimen JavaScript rekisteröityä ja purkaa laitteita.
tämä artikkeli ei käsittele selainpuolen koodia tai sen toimintaa. Sinun täytyy määrittää palvelutyöntekijä, joka vastaa saapuviin push-tapahtumiin ja näyttää ilmoituksen käyttäjälle.
korkealla tasolla web push flow näyttää tältä:
- push-tilaus tallennetaan selaimeen. Selain lähettää 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 saa hyötykuorman palveluntarjoajan ilmoitustoimitusalustan kautta. JavaScript-palvelusi työntekijä käsittelee tuloksena olevan tapahtuman ja käyttää selaimen ilmoitusrajapintaa käyttäjän hälyttämiseen.
tässä on ohjeet vaiheiden 1-3 palvelinpuolen toteuttamiseen.
Get configuration
käytämme minishlinkin web-push
Packagiste-pakettia. Tämä jättää huomiotta vuorovaikutuksen kunkin selaimen ilmoitusalustan kanssa, joten sinun ei tarvitse erottaa päätetyyppejä manuaalisesti.
lisää paketti projektiin käyttäen säveltäjää:
composer require minishlink / web-push
voit käyttää uusinta versiota tarvitset PHP 7.2 tai uudempi kanssa gmp
, mbstring
, curl
, ja openssl
laajennukset. Jos joudut käyttämään PHP: n vanhempaa versiota, Lukitse paketti vanhempaan versioon säilyttääksesi yhteensopivuuden.
kirjasto paljastaa ytimen WebPush
luokan menetelmillä, joilla ilmoituksia voi lähettää yksittäin tai erissä. Tilausmäärät esitetään Subscription
– luokituksen ilmentyminä.
tarjoa VAPID-avaimia
luottamus standardien mukaiseen web push-ekosysteemiin paranee käyttämällä VAPID-avaimia. Palvelin tarvitsee VAPID-avainparin voidakseen todentaa selainten avulla. Julkinen avain on altistettava API-päätepisteen kautta.
voit luoda VAPIDIN avaimenperän käyttämällä web-push
käärettä:
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));
luo avaimet järjestelmään ja tallentaa ne pysyvään paikkaan. Lisää API päätepiste niin, että 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-yksityisellä avaimella.
push-liittymien rekisteröinti
seuraava vaihe järjestyksessä on vastaanottaa push-liittymäpyyntöjä asiakkailtasi. Kun selain vahvistaa uuden push-tilauksen, JavaScriptin tulee lähettää tilauksen päätepisteen URL ja siihen liittyvät todennusavaimet palvelimellesi. Tallenna nämä tiedot käyttäjätunnuksella, jotta voit hakea mahdolliset push-kirjatut laitteet, jotka on linkitetty käyttäjään myöhemmin.
jätämme tämän vaiheen koodinäytteet pois, koska toteutus riippuu Tallennustasostasi ja JavaScriptin lähettämistä arvoista. Tyypillisesti tämä on PushSubscription
olion JSON-esitys. Tarvitset yksinkertaisen joukon tietokantapohjaisia CRUD API-päätepisteitä luodaksesi tilauksen, korvataksesi olemassa olevan tilauksen ja pyytääksesi poistoa, kun käyttäjä peruuttaa tilauksen.
tilausten valmistelu
kun asiakas on rekisteröitynyt onnistuneesti, voit aloittaa ilmoitusten lähettämisen käyttämällä web-push
kirjastoa. Aloita luomalla esiintymä WebPush
luokitellaksesi:
use MinishlinkWebPushWebPush; $ webPush = new WebPush(]);
voit käyttää yhden WebPush
instanssin uudelleen aina, kun lähetät ilmoituksen. Kirjasto on määritettävä aiemmin luomallasi vapid-avainrenkaalla. Avainten tulee olla Base64-koodattuja, 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.
sitten sinun täytyy napata push-tilaus, johon aiot lähettää. Käytä tietojen käyttöoikeusjärjestelmää löytääksesi push-päätepisteen URL-osoitteet, jotka liittyvät käyttäjään, jolle haluat lähettää. Muunna jokainen tilaus yhdeksi Subscription
esimerkki:
use MinishlinkWebPushSubscription; // Get user's push data ...// SELECT * FROM push_subscriptions WHERE user_id = 123456 $ subscription = Subscription::create(]);
auth
ominaisuus PushSubscription
toistetaan kahdesti, jotta voidaan käsitellä kahta eri versiota selainpalveluiden käyttämästä spesifikaatiosta. P256dh-ominaisuus on toinen julkinen avain, joka on annettava tilauksen yhteydessä.
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
et Subscription
instanssit ilmoituksen lähettämiseen:
$ result = $ webPush -> sendOneNotification( $ subscription, json_encode());
Appel sendOneNotification()
tarjoaa välittömän toimituksen yhdelle ilmoitukselle. Hyötykuorma tässä tapauksessa on JSON koodattu array, jolla on kaksi ominaisuutta. Se on sinusta kiinni, mitä tietoja lähetät ja missä muodossa 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.
ilmoitusten Tilausten voimassaolo voi myös päättyä. Soita isSubscriptionExpired()
tulosluokkaan ja selvitä, onko vika tässä. Voit poistaa tilauksen tietokannastasi tässä skenaariossa varmistaen, ettet lähetä mitään muuta umpikujaan.
Eräilmoitukset
ilmoitukset voidaan ryhmitellä yhteen toimitettavaksi yhdellä menetelmäpuhelulla:
$ webPush -> queueNotification($ subscription, );$ webPush -> queueNotification($ subscription, ); foreach ($ webPush -> flush() as $i => $ result) { threw out ("Notification $i was " . ($ result -> isSuccess() ? "feels" : "not sent"));}
tämä on hyödyllistä, kun tiedät, että aiot lähettää suuren määrän ilmoituksia lyhyessä ajassa. Jonota kaikki hyötykuormasi ja anna web-push
toimittaa ne optimaalisesti.
voit rajoittaa lähetettyjen ilmoitusten määrän yhteen flush()
siirtämällä kokonaisluvun menetelmään:
$ webPush -> flush(100); // send 100 messages
oletusarvo on 1000
.
Ilmoitusvaihtoehdot
sendOneNotification()
et queueNotification()
hyväksyvät joukon kolmanneksi argumentiksi seuraavat vaihtoehdot:
-
TTL
– määrittää, kuinka kauan selaimen ilmoitusalusta säilyttää ilmoituksen, jos sitä ei voida toimittaa käyttäjän laitteelle välittömästi. Jos käyttäjän laite on offline-tilassa, alustat yrittävät toimittaa sitä oletusarvoisesti seuraavan neljän viikon ajan. Jos lähetät ensi viikolla ilmoituksen, jolla ei ole merkitystä, säädä ikää sen mukaan, jotta käyttäjä ei näe vanhentunutta sisältöä. -
urgency
– hyväksynormal
,low
ouvery-low
arvoiksi. Jotkut alustat saattavat käyttää sitä 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ä WebPush
valmistajan toista argumenttia:
$ webPush = new WebPush(], );
Yhteenveto
web-push
kirjaston avulla on helppo lähettää web push-ilmoituksia PHP: n avulla. Eri selainalustojen päälle tulee abstraktiokerros, joka tukee eräkäsittelyä, virheiden käsittelyä ja kaikkia web push-toimintoja.
web push-mekanismi on epätavallinen selainjärjestelmä, koska se nojaa etäpalvelinpuolen komponentteihin, jotka annat itse. Tämä voi saada sen näyttämään läpinäkymättömältä ja tekniseltä. Käytännössä yksinkertaisen PHP-taustajärjestelmän luominen on nopeaa ja helppoa; front-end-toteutus on yleensä eniten aikaa vievä näkökohta, varsinkin jos et jo käytä service worker-ominaisuuksia.