a Web Push API lehetővé teszi, hogy push értesítéseket küldjön a böngészőknek és API-knak. Míg a logika nagy része a böngészőben zajlik, az értesítések létrehozásához továbbra is szükség van egy szerveroldali összetevőre. Itt van, hogyan kell végrehajtani egy webes push backend PHP használatával.
összefoglaló
előfeltételek
ennek az oktatóanyagnak az alkalmazásában feltételezzük, hogy ismeri a HTTP API-k PHP-ben történő felépítésének alapjait. Meg kell, hogy ki néhány nyilvános végpontok segítségével a webes infrastruktúra. Ezeket a böngészője Javascriptje hívja fel az eszközök regisztrálására és törlésére.
ez a cikk nem terjed ki a böngészőoldali kódra vagy annak működésére. Be kell állítania egy szervizmunkást, amely válaszol a bejövő leküldéses eseményekre, és értesítést jelenít meg a felhasználó számára.
magas szinten a webes push áramlás így néz ki:
- a push előfizetés mentésre kerül a böngészőben. A böngésző egyedi végpont URL-t küld a JavaScript-nek.
- a JavaScript elküldi az előfizetési adatokat a szerverre, és azonosítja azt a felhasználót, amelyre vonatkozik.
- amikor a háttérprogramnak push értesítést kell küldenie, hozzon létre egy hasznos terhet, és küldje el azt az előfizetési adatok részeként jelentett végpont URL-re.
- a felhasználó böngészője a Szolgáltató értesítési platformján keresztül kapja meg a hasznos terhet. A JavaScript szolgáltatás munkatársa kezeli a kapott eseményt, és a böngésző értesítési API-ját használja a felhasználó figyelmeztetésére.
itt van, hogyan kell végrehajtani a szerver oldali szempontok lépések 1-3.
Get configuration
fogjuk használni a web-push
Packagiste csomag által minishlink. Ez figyelmen kívül hagyja az egyes böngésző értesítési platformokkal való interakciókat, így nem kell manuálisan megkülönböztetnie a végponttípusokat.
adja hozzá a csomagot a projekthez a Composer segítségével:
composer require minishlink / web-push
a legújabb verzió használatához PHP 7.2 vagy újabb verzióra van szükség gmp
, mbstring
, curl
, és openssl
kiterjesztések. Ha a PHP régebbi verzióját kell használnia, zárja le a csomagot egy régebbi verzióra a kompatibilitás fenntartása érdekében.
a könyvtár kitesz egy kernel WebPush
osztályt olyan módszerekkel, amelyek lehetővé teszik az értesítések külön-külön vagy kötegekben történő küldését. Az előfizetéseket a Subscription
osztályozás példányai képviselik.
adjon meg VAPID kulcsokat
a Vapid kulcsok használata növeli a szabványoknak megfelelő web push ökoszisztémába vetett bizalmat. A szervernek szüksége van egy VAPID kulcspárra, hogy képes legyen hitelesíteni a böngészőkkel. A nyilvános kulcsot API-végponton keresztül kell kitenni.
a web-push
wrap segítségével létrehozhat egy VAPID kulcstartót:
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));
generáljon kulcsokat a rendszeréhez, és tárolja azokat állandó helyen. Adjon hozzá egy API-végpontot, hogy az ügyféloldali JavaScript le tudja tölteni a nyilvános kulcsot. Ez a böngésző push előfizetésének konfigurálására szolgál. A felhasználó készüléke elfogadja a bejövő push eseményeket, ha azokat a megfelelő VAPID privát kulccsal írták alá.
push előfizetések regisztrálása
a sorozat következő lépése az ügyfelek push előfizetési kéréseinek fogadása. Miután a böngésző megerősítette az új push-előfizetést, a JavaScript-nek el kell küldenie az előfizetési végpont URL-jét és a hozzá tartozó hitelesítési kulcsokat a kiszolgálóra. Tárolja ezeket az adatokat a felhasználói azonosítóval, hogy később lekérhesse a felhasználóhoz kapcsolt push-beiratkozott eszközöket.
ehhez a lépéshez kihagyjuk a kódmintákat, mert a megvalósítás az adattároló rétegtől és a JavaScript által küldött értékektől függ. Általában ez egy PushSubscription
objektum JSON-ábrázolása lesz. Szüksége van egy egyszerű adatbázis-alapú CRUD API végpontkészletre az előfizetés létrehozásához, a meglévő előfizetés cseréjéhez és a Törlés kéréséhez, amikor a felhasználó leiratkozik.
előfizetések előkészítése
miután az ügyfél sikeresen regisztrált, elkezdheti az értesítések küldését a web-push
könyvtár segítségével. Először hozzon létre egy példányt a WebPush
osztályozni:
use MinishlinkWebPushWebPush; $ webPush = new WebPush(]);
minden alkalommal, amikor értesítést küld, újra felhasználhat egy WebPush
példányt. A könyvtárat a korábban létrehozott VAPID kulcstartóval kell konfigurálni. A kulcsoknak Base64 kódolásúnak kell lenniük, de ezt akkor kezeli az Ön számára, ha a könyvtárral hozza létre őket.
a VAPID subject
a szerver és a kapcsolattartási adatok azonosítására szolgál. Megadhat egy webhely URL-jét vagy egy mailto:
e-mail címet.
ezután meg kell ragadnia a push előfizetést, amelyet küldeni fog. Az adatelérési rendszer segítségével keresse meg a push végpont URL-jeit, amelyek a küldeni kívánt felhasználóhoz vannak társítva. Konvertálja az egyes előfizetéseket egy Subscription
példa:
use MinishlinkWebPushSubscription; // Get user's push data ...// SELECT * FROM push_subscriptions WHERE user_id = 123456 $ subscription = Subscription::create(]);
a auth
tulajdonság a PushSubscription
kétszer megismételjük foglalkozni két különböző változata a specifikáció által használt böngésző szolgáltatások. A P256DH tulajdonság egy másik nyilvános kulcs, amelyet meg kell adni, ha be van állítva az előfizetésen.
a web-push
a könyvtár kompatibilis a Chrome és a Firefox push végpontokkal. Ez minden más webes push megvalósítással is működni fog, amely megfelel a jelenlegi szabványnak.
értesítés küldése
most kombinálja a WebPush
et Subscription
példányokat értesítés küldéséhez:
$ result = $ webPush -> sendOneNotification( $ subscription, json_encode());
az Appel sendOneNotification()
azonnali kézbesítést biztosít egyetlen értesítéshez. A hasznos teher ebben az esetben egy JSON kódolt tömb, két tulajdonsággal. Önön múlik, hogy milyen adatokat küld és milyen formátumot használ – a JavaScript kliens megkapja, ahogy van, és szükség szerint értelmezheti.
értesítés küldése eredményosztályt ad vissza, amely lehetővé teszi annak ellenőrzését, hogy a művelet sikeres volt-e:
if ($ result -> isSuccess()) { // all good}else { // something went wrong error_log($ result -> getReason()); // provides raw HTTP response data error_log($ result -> getResponse()); }
ha hiba lép fel, lépéseket tehet a kézbesítés újbóli megkísérlésére vagy megszakítására.
az értesítések előfizetései szintén lejárhatnak. Hívja a isSubscriptionExpired()
egy eredményosztályon annak megállapításához, hogy ez a hiba oka. Ebben az esetben eltávolíthatja az előfizetést az adatbázisából, ügyelve arra, hogy ne küldjön mást egy zsákutcába.
kötegelt értesítések
az értesítések csoportosíthatók, hogy egyetlen módszerhívással kézbesíthetők legyenek:
$ webPush -> queueNotification($ subscription, );$ webPush -> queueNotification($ subscription, ); foreach ($ webPush -> flush() as $i => $ result) { threw out ("Notification $i was " . ($ result -> isSuccess() ? "feels" : "not sent"));}
ez akkor hasznos, ha tudja, hogy rövid idő alatt nagyszámú értesítést fog küldeni. Állítsa sorba az összes hasznos terhet, és hagyja, hogy a web-push
optimálisan szállítsa őket.
korlátozhatja az egyben küldött értesítések számát flush()
egész szám átadása a módszernek:
$ webPush -> flush(100); // send 100 messages
az alapértelmezett érték 1000
.
értesítési lehetőségek
sendOneNotification()
et queueNotification()
fogadja el a következő opciókat A tömb harmadik argumentumaként:
-
TTL
– szabályozza, hogy a böngésző értesítési platformja mennyi ideig tárolja az értesítést, ha azt nem lehet azonnal eljuttatni a felhasználó eszközére. Ha a felhasználó eszköze offline állapotban van, a platformok alapértelmezés szerint megpróbálják kézbesíteni a következő négy hétben. Ha olyan értesítést küld, amely a jövő héten nem lesz releváns, állítsa be ennek megfelelően az életkorot, hogy a felhasználó ne lássa az elavult tartalmat. -
urgency
– fogadja el anormal
,low
ouvery-low
értékeket. Egyes platformok használhatják az értesítés kézbesítésének gyakoriságának beállítására. Az energiatakarékos üzemmódba lépő eszközök felfüggeszthetik a nem sürgős értesítések kézbesítését. -
batchSize
– ennek ugyanaz a hatása, mint a fent leírtflush()
argumentumnak.
az alapértelmezett beállításértékeket a WebPush
gyártó második argumentumával konfigurálhatja:
$ webPush = new WebPush(], );
Összegzés
a web-push
a könyvtár megkönnyíti a webes push értesítések küldését PHP használatával. A különböző böngészőplatformok tetején egy absztrakciós réteget kap, amely támogatja a kötegelt feldolgozást, a hibakezelést és az összes webes push funkciót.
a web push mechanizmus egy szokatlan böngészőrendszer, mert távoli szerveroldali összetevőkre támaszkodik, amelyeket Ön ad meg. Ez lehet, hogy úgy tűnik, átláthatatlan és technikai. A gyakorlatban egy egyszerű PHP backend létrehozása gyors és egyszerű; a front-end implementáció általában a leginkább időigényes szempont, különösen, ha még nem használja a service worker funkciókat.