hogyan küldhetünk webes Push értesítéseket PHP
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 történik, 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 segítségével PHP.
előfeltételek
az oktatóanyag alkalmazásában feltételezzük, hogy ismeri a HTTP API-k PHP-ben történő létrehozásának alapjait. Néhány nyilvános végpontot ki kell tárnia a webes keretrendszer segítségével. Ezeket a böngészőn belüli JavaScript hívja az eszközök regisztrálásához és törléséhez.
ez a cikk nem érinti a böngésző oldali kódot vagy annak működését. Össze 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 regisztrálva van a böngészőben. A böngésző egyedi végpont URL-t ad ki a JavaScript-hez.
- a JavaScript elküldi az előfizetési adatokat a szerverre, és azonosítja a felhasználót, akire 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 szállító értesítési platformján keresztül kapja meg a hasznos terhet. A JavaScript szolgáltatás munkatársa kezeli az ebből következő eseményt, és a böngésző értesítési API-ját használja a felhasználó figyelmeztetésére.
az 1-3.lépések szerveroldali aspektusainak megvalósítása.
Első beállítás
fogjuk használni a web-push
Packagist csomagot minishlink. Ez összefoglalja 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 régebbi PHP kiadást kell használnia, zárja le a csomagot egy korábbi verzióra a kompatibilitás fenntartása érdekében.
a könyvtár kitesz egy core WebPush
osztályt olyan módszerekkel, amelyek lehetővé teszik az értesítések külön-külön vagy kötegként történő küldését. Az előfizetéseket a Subscription
osztály példányai képviselik.
Vapid kulcsok biztosítása
a szabványoknak megfelelő webes Push ökoszisztémába vetett bizalom a VAPID kulcsok használatával érvényesül. A szervernek szüksége van egy VAPID kulcspárra, hogy hitelesíthesse magát a böngészők számára. A nyilvános kulcsot API-végponton keresztül kell kitenni.
a web-push
csomag segítségével létrehozhat egy VAPID kulcskészletet:
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));
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 beállítására szolgál. A felhasználó eszköze 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 a push előfizetési kérelmek fogadása az ügyfelektől. 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és végpont URL-jét és a kapcsolódó hitelesítési kulcsokat a kiszolgálóra. Tárolja ezeket az adatokat a felhasználó azonosítója mellett, így később lekérheti a felhasználóhoz kapcsolt összes push-beiratkozott eszközt.
ehhez a lépéshez kihagyjuk a kódmintákat, mivel 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, egy meglévő cseréjéhez és törléshez, 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ályból:
use Minishlink\WebPush\WebPush; $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 kulcskészlettel kell konfigurálni. A kulcsokat Base64-ként kell kódolni, de ezt 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 letölteni a push előfizetés akkor küld. Az adatelérési rendszer segítségével keresse meg a push végpont URL-jeit ahhoz a felhasználóhoz, akinek küldeni szeretné. Minden előfizetés konvertálása Subscription
példányra:
use Minishlink\WebPush\Subscription; // 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, hogy megbirkózzon két különböző változatai a spec által használt böngésző szolgáltatások. A P256DH tulajdonság egy másik nyilvános kulcs, amelyet az előfizetés beállításakor kell megadni.
a web-push
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ödik, amely megfelel a jelenlegi szabványnak.
értesítés küldése
most kombinálja a WebPush
és Subscription
példányokat az értesítés küldéséhez:
$result = $webPush -> sendOneNotification( $subscription, json_encode());
a sendOneNotification()
hívás 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 úgy fogadja, ahogy van, és szükség szerint értelmezheti.
értesítés küldése eredményosztályt ad vissza, amely lehetővé teszi a művelet sikerességének ellenőrzését:
if ($result -> isSuccess()) { // all good}else { // something went wrong error_log($result -> getReason()); // provides raw HTTP response data error_log($result -> getResponse()); }
hiba esetén újra megpróbálhatja vagy törölheti a kézbesítést.
az értesítési előfizetések is lejárhatnak. Hívja a isSubscriptionExpired()
metódust egy eredményosztályon annak megállapításához, hogy ez a hiba oka. Ebben az esetben törölheti az előfizetést az adatbázisából, biztosítva, hogy ne küldjön mást egy zsákutcába.
kötegelési értesítések
az értesítések egy módszerhívással együtt kötegelhetők a kézbesítéshez:
$webPush -> queueNotification($subscription, );$webPush -> queueNotification($subscription, ); foreach ($webPush -> flush() as $i => $result) { echo ("Notification $i was " . ($result -> isSuccess() ? "sent" : "not sent"));}
ez akkor hasznos, ha tudja, hogy rövid időn belül nagyszámú értesítést küld. Sorolja fel az összes hasznos terhet, és hagyja, hogy a web-push
az optimális módon szállítsa őket.
korlátozhatja az egyetlen flush()
– ben küldött értesítések számát, ha egész számot ad át a módszerhez:
$webPush -> flush(100); // send 100 messages
az alapértelmezett érték 1000
.
értesítési lehetőségek
sendOneNotification()
és queueNotification()
fogadja el a következő opciókat harmadik tömb argumentumként:
-
TTL
– szabályozza, hogy a böngésző értesítési platformja mennyi ideig fogja megtartani az értesítést, ha azt nem lehet azonnal továbbítani 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 a TTL-t, hogy a felhasználó ne lássa az elavult tartalmat. -
urgency
–normal
,low
vagyvery-low
értékeket fogad el. Egyes platformok ezt használhatják az értesítések kézbesítésének gyakoriságának beállításához. Azok az eszközök, amelyek energiatakarékos üzemmódba lépnek, 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
konstruktor második argumentumával konfigurálhatja:
$webPush = new WebPush(], );
Összegzés
a web-push
könyvtár megkönnyíti a webes Push értesítések küldését PHP használatával. Kapsz egy absztrakciós réteget a különböző böngészőplatformok tetején, amely támogatja az adagolást, a hibakezelést és az összes webes Push funkciót.
a webes Push mechanizmus egy szokatlan böngészőrendszer, mivel a távoli szerveroldali komponensekre támaszkodik. Ez átláthatatlannak és technikainak tűnhet. A gyakorlatban egy egyszerű PHP backend létrehozása gyors és egyszerű; a frontend implementáció általában az időigényesebb szempont, különösen akkor, ha még nem használja a service worker funkciókat.
Leave a Reply