hogyan küldhetünk webes Push értesítéseket PHP

PHP Logo

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:

  1. 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.
  2. a JavaScript elküldi az előfizetési adatokat a szerverre, és azonosítja a felhasználót, akire vonatkozik.
  3. 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.
  4. 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
hirdetés

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.

hirdetés

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

hirdetés

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.

hirdetés

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.
  • urgencynormal, low vagy very-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írt flush() 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.

hirdetés

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