Hogyan lehet a WebApp-ot PWA-vá konvertálni push értesítéssel

Ebben a cikkben bemutatjuk, hogyan lehet webalkalmazást vagy webhelyet PWA-vá konvertálni push értesítéssel a Firebase Cloud Messaging használatával.

A modern világban a legtöbb webes alkalmazást PWA-vá (progresszív webalkalmazás) alakítják át, mivel olyan funkciókat kínál, mint az offline támogatás, a push értesítések és a háttérben történő szinkronizálás. A PWA funkciói webalkalmazásunkat inkább natív alkalmazáshoz teszik, és gazdag felhasználói élményt nyújtanak.

Például az olyan nagy cégek, mint a Twitter és az Amazon, a webalkalmazásukat PWA-ra alakították át a nagyobb felhasználói elkötelezettség érdekében.

Mi az a PWA?

PWA = (Webes alkalmazás) + (néhány natív alkalmazásfunkció)

A PWA ugyanaz a webalkalmazás (HTML+CSS+JS). Ugyanúgy működik, mint a webalkalmazás minden böngészőben, mint korábban. De rendelkezhetnek natív funkciókkal, amikor a webhely betöltődik egy modern böngészőben. Erőteljesebbé teszi a webalkalmazást, mint korábban, és skálázhatóbbá is teszi, mert képesek vagyunk előre lekérni és gyorsítótárazni az eszközöket a frontendben, ez csökkenti a háttérkiszolgálóhoz intézett kéréseket.

Miben különbözik a PWA a Web Apptól

  • Telepíthető: Webalkalmazása natív alkalmazásként telepíthető
  • Progresszív: Ugyanúgy működik, mint a webalkalmazása, de néhány natív funkcióval
  • Natív alkalmazásélmény: A felhasználó telepítése után natív alkalmazásként használhatja és navigálhat a webalkalmazásban.
  • Könnyen elérhető: A webalkalmazásunkkal ellentétben felhasználóinknak nincs szükségük arra, hogy minden látogatáskor webcímet írjanak be. Beszerelés után egyetlen érintéssel kinyitható.
  • Alkalmazás-gyorsítótár: A PWA előtt az egyetlen gyorsítótárazási mechanizmus, amellyel webalkalmazásunk a HTTP-gyorsítótár használata volt, amely csak a böngésző számára érhető el. De a PWA segítségével gyorsítótárazhatjuk a dolgokat úgy, hogy magát a kliensoldali kódot használjuk, amely nem érhető el egy webalkalmazásban.
  • (App/Play) bolti közzététel: A PWA közzétehető a Google Play Áruházban és az IOS App Store-ban.

Ha az alkalmazást PWA-ba konvertálja, az csak még erősebb lesz.

Miért kell az üzleti életnek fontolóra vennie a PWA-t?

Míg a legtöbb ügyfelünk megkeres minket, és először a Web App megoldás fejlesztését kéri, majd Android és iOS alkalmazásokat. Mindössze annyit fogunk tenni, hogy ugyanazt a funkcionalitást a webalkalmazásból Android/IOS-alkalmazásba építjük egy külön csapat által, ami több fejlesztési költséget és több időt vesz igénybe a piacra kerüléshez.

Néhány ügyfél azonban korlátozott költségvetéssel rendelkezik, vagy egyes ügyfelek úgy gondolhatják, hogy a piacra jutás ideje fontosabb a terméke szempontjából.

Az ügyféligények többségét maguk a PWA-funkciók is kielégíthetik. Nekik csak a PWA-t javasoljuk, és ötletet adunk nekik, hogy PWA-jukat TWA használatával Android-alkalmazássá alakítsák át, ha a Playstore-ban szeretnének üzembe helyezni.

Ha a követelménynek valóban olyan natív alkalmazási funkciókra van szüksége, amelyeket a PWA nem tud kielégíteni. Az ügyfelek tetszés szerint fejleszthetik mindkét alkalmazást. De még ebben a forgatókönyvben is. Az Android fejlesztésének befejezéséig telepíthetik a PWA-t a Play Áruházban.

Példa: Titan Eyeplus

Kezdetben kifejlesztettek egy PWA alkalmazást, és a TWA (Trusted Web Activity) segítségével telepítették a Play Áruházban. Miután befejezték az Android alkalmazás fejlesztését. Bevezették valódi Android-alkalmazásukat a Play Áruházban. Mind a piacra jutási időt, mind a fejlesztés költségeit a PWA segítségével érték el.

PWA funkciók

A PWA natív alkalmazásszerű funkciókat biztosít webes alkalmazásainknak.

A főbb jellemzők a következők:

  • Telepíthető: natív alkalmazásként telepített webalkalmazás.
  • Gyorsítótárazás: Az alkalmazások gyorsítótárazása lehetséges, ami az alkalmazásunk offline támogatását biztosítja.
  • Push értesítés: Push értesítés küldhető a szerverünkről, hogy felhasználóinkat bevonják webhelyünkbe.
  • Geofencing: Az alkalmazás értesítést kaphat egy eseményről, amikor az eszköz helye megváltozik.
  • Fizetési kérelem: Engedélyezze a fizetést az alkalmazásban olyan nagyszerű felhasználói élménnyel, mint egy natív alkalmazás.
  Hogyan készíts jobb fotókat otthonodban (nincs szükség vakura)

És még sok más funkció várható a jövőben.

További jellemzők:

  • Parancsikonok: Gyorsan elérhető URL-ek hozzáadva a jegyzékfájlhoz.
  • Web Share API: Lehetővé teszi, hogy az alkalmazás megosztott adatokat fogadjon más alkalmazásoktól.
  • Badge API: Az értesítések számának megjelenítése a telepített PWA-ban.
  • Periodikus háttérszinkronizálási API: addig menti a felhasználó adatait, amíg az nem csatlakozik a hálózathoz.
  • Névjegyválasztó: névjegyek kiválasztására szolgál a felhasználó mobiljáról.
  • Fájlválasztó: A fájl eléréséhez használható helyi rendszeren/mobilon

A PWA előnye a natív alkalmazással szemben

A natív alkalmazás jobban teljesít, mint a PWA, és több funkcióval rendelkezik, mint a PWA. Ennek ellenére van néhány előnye a natív alkalmazással szemben.

  • A PWA több platformon fut, mint például Android, IOS, Desktop.
  • Csökkenti a fejlesztési költségeket.
  • Könnyű funkciótelepítés a natív alkalmazásokhoz képest.
  • Könnyen felfedezhető, mert a PWA(weboldal) SEO-barát
  • Biztonságos, mert csak HTTPS-en működik

A PWA hátrányai a natív alkalmazáshoz képest

  • A natív alkalmazásokhoz képest korlátozott funkciók állnak rendelkezésre.
  • A PWA-funkciók nem garantáltan támogatják az összes eszközt.
  • A PWA márkajelzése alacsony, mert nem érhető el az App Store-ban vagy a Play Áruházban.

A PWA-t Android-alkalmazásként telepítheti a Play Áruházban az Android használatával Megbízható internetes tevékenység (TWA). Ez segít a márkaépítésben.

A Web App PWA-vá alakításához szükséges dolgok

Bármely webalkalmazás vagy webhely PWA-ra való konvertálásához.

  • Service-Worker: minden PWA-alkalmazás magja a gyorsítótárazáshoz, a push értesítésekhez, a kéréseink proxyjához.
  • Manifest fájl: A webalkalmazás részleteit tartalmazza. Korábban úgy töltötte le az alkalmazásunkat, mint egy natív alkalmazást a kezdőképernyőn.
  • Alkalmazás logója: Kiváló minőségű kép, 512 x 512 px az alkalmazás ikonjához. Az alkalmazás logója szükséges a PWA-hoz a kezdőképernyőn, a kezdőképernyőn, stb. Tehát bármilyen eszközzel létre kell hoznunk egy 1:1 arányú képeket az APP-unkhoz.
  • Reszponzív tervezés: A webalkalmazásnak érzékenynek kell lennie a különböző méretű képernyőkön való működéshez.

Mi az a szervizmunkás:

A szervizmunkás (ügyféloldali szkript) egy proxy a webalkalmazása és a külső oldal között, amely push értesítéseket küld a webalkalmazásunkhoz, és támogatja a gyorsítótárazást.

A Service Worker a fő javascripttől függetlenül fut. Tehát nem fér hozzá a DOM API-hoz. Csak hozzáférhet IndexedDB API, API lekérése, Cache Storage API. De üzenettel kommunikálhat a főszállal.

A szervizmunkás által nyújtott szolgáltatás:

  • HTTP-kérések elfogása a származási domainből.
  • Push értesítések fogadása a szerverről.
  • Alkalmazásunk offline elérhetősége

A szervizmunkás vezérli az alkalmazást, és módosíthatja a kéréseket, de függetlenül fut. Emiatt tehát az eredeti tartományt engedélyezni kell a HTTPS-szel, hogy elkerüljük a köztes támadást.

Mi az a Manifest fájl

A jegyzékfájl (manifest.json) tartalmazza a PWA-alkalmazásunk részleteit, hogy közölje a böngészővel.

  • név: A pályázat neve
  • short_name: Alkalmazásunk rövid neve. Ha biztosított
  • mind a tulajdonságnév, mind a rövid_név esetén a böngésző a rövid_nevet veszi fel.
  • leírás: Leírás az alkalmazásunk leírásához.
  • start_url: Az alkalmazás kezdőlapjának megadása a PWA elindításakor.
  • ikonok: Képkészlet PWA for Home képernyőhöz stb.
  • background_color: A kezdőképernyő háttérszínének beállítása a PWA alkalmazásunkban.
  • kijelző: A böngésző felhasználói felületének testreszabása, hogy megjelenjen a PWA alkalmazásunkban.
  • theme_color: A PWA alkalmazás témaszíne.
  • hatókör: alkalmazásunk URL-címe, amelyet figyelembe kell venni a PWA esetében. Alapértelmezés szerint a jegyzékfájl helye.
  • parancsikonok: Gyorshivatkozások a PWA alkalmazásunkhoz.

A Web App konvertálása PWA-ba

Demo célból létrehoztam egy etoppc.com webhely mappastruktúrát statikus fájlokkal.

  • index.html – kezdőlap
  • cikkek/
    • index.html – cikkek oldala
  • szerzői/
    • index.html – szerzők oldala
  • eszközök/
    • index.html – eszközök oldal
  • ajánlatok/
    • index.html – ajánlatok oldala

Ha már van webhelye vagy webalkalmazása, próbálja meg konvertálni PWA-ba az alábbi lépések végrehajtásával.

Hozzon létre szükséges képeket a PWA-hoz

Először is, vegye elő az alkalmazás emblémáját, és vágja le 1:1 arányban 5 különböző méretben. használtam https://tools.crawlink.com/tools/pwa-icon-generator/ hogy gyorsan különböző képméreteket kapjon. Tehát te is használhatod.

Hozzon létre egy manifest fájlt

Másodszor, hozzon létre egy manifest.json fájlt a webalkalmazásához az alkalmazás részleteivel. A demóhoz létrehoztam egy manifest fájlt a etoppc.com webhelyhez.

{
	"name": "etoppc.com",
	"short_name": "etoppc.com",
	"description": "etoppc.com produces high-quality technology & finance articles, makes tools, and APIs to help businesses and people grow.",
	"start_url": "/",
	"icons": [{
		"src": "assets/icon/icon-128x128.png",
		"sizes": "128x128",
		"type": "image/png"
	}, {
		"src": "assets/icon/icon-152x152.png",
		"sizes": "152x152",
		"type": "image/png"
	}, {
		"src": "assets/icon/icon-192x192.png",
		"sizes": "192x192",
		"type": "image/png"
	}, {
		"src": "assets/icon/icon-384x384.png",
		"sizes": "384x384",
		"type": "image/png"
	}, {
		"src": "assets/icon/icon-512x512.png",
		"sizes": "512x512",
		"type": "image/png"
	}],
	"background_color": "#EDF2F4",
	"display": "standalone",
	"theme_color": "#B20422",
	"scope": "/",
	"shortcuts": [{
			"name": "Articles",
			"short_name": "Articles",
			"description": "1595 articles on Security, Sysadmin, Digital Marketing, Cloud Computing, Development, and many other topics.",
			"url": "https://geekflare.com/articles",
			"icons": [{
				"src": "/assets/icon/icon-152x152.png",
				"sizes": "152x152"
			}]
		},
		{
			"name": "Authors",
			"short_name": "Authors",
			"description": "etoppc.com - Authors",
			"url": "/authors",
			"icons": [{
				"src": "/assets/icon/icon-152x152.png",
				"sizes": "152x152"
			}]
		},
		{
			"name": "Tools",
			"short_name": "Tools",
			"description": "etoppc.com - Tools",
			"url": "https://etoppc.com.com/tools",
			"icons": [{
				"src": "/assets/icon/icon-152x152.png",
				"sizes": "152x152"
			}]
		},
		{
			"name": "Deals",
			"short_name": "Deals",
			"description": "etoppc.com - Deals",
			"url": "/deals",
			"icons": [{
				"src": "/assets/icon/icon-152x152.png",
				"sizes": "152x152"
			}]
		}
	]
}

Regisztráljon szervizmunkást

hozzon létre egy szkriptfájlt register-service-worker.js és service-worker.js a gyökérmappában.

  Az RSS-hírcsatornák használata

Az első, register-service-worker.js a javascript fájl, amely azon a fő szálon fog futni, amely hozzáférhet a DOM API-hoz. De a service-worker.js egy szervizmunkás szkript, amely a fő száltól függetlenül fut, és élettartama is rövid. Minden alkalommal fut, amikor események hívják a szervizmunkásokat, és addig fut, amíg a folyamat be nem fejeződik.

A főszál javascript fájljának ellenőrzésével ellenőrizheti, hogy a service worker regisztrálva van-e benne. ha nem, akkor regisztrálhatja a service worker szkriptet (service-worker.js).

illessze be az alábbi részletet a register-service-worker.js fájlba:

if ('serviceWorker' in navigator) {
    window.addEventListener('load', function() {
        navigator.serviceWorker.register('/service-worker.js');
    });
}

Illessze be az alábbi kódrészletet a service-worker.js fájlba

self.addEventListener('install', (event) => { // event when service worker install
    console.log( 'install', event);
    self.skipWaiting();
});

self.addEventListener('activate', (event) => { // event when service worker activated
    console.log('activate', event);
    return self.clients.claim();
});

self.addEventListener('fetch', function(event) { // HTTP request interceptor
    event.respondWith(fetch(event.request)); // send all http request without any cache logic
    /*event.respondWith(
        caches.match(event.request).then(function(response) {
            return response || fetch(event. request);
        })
    );*/ // cache new request. if already in cache serves with the cache.
});

Nem koncentráltunk arra, hogyan engedélyezzük a gyorsítótárat az offline támogatáshoz. Csak arról beszélünk, hogyan lehet a webalkalmazásokat PWA-vá konvertálni.

Adjon hozzá jegyzékfájlt és szkriptet a HTML-oldal all head címkéjéhez.

<link rel="manifest" href="https://etoppc.com.com/manifest.json">
<script src="/register-service-worker.js"></script>

Hozzáadás után frissítse az oldalt. Most már telepítheti alkalmazását az alábbiak szerint a mobil Chrome-ra.

A kezdőképernyőn megjelenik az alkalmazás.

Ha WordPress-t használsz. Próbálja meg a meglévő PWA konverter bővítményt használni. A vueJS vagy a reactJS esetében követheti a fenti módszert, vagy használhatja a meglévő PWA npm modulokat a fejlesztés felgyorsításához. Mivel a PWA npm modulok már engedélyezve vannak az offline támogatás gyorsítótárazásával stb.

Push Notification engedélyezése

Webes push értesítéseket küldünk a böngészőnek, hogy felhasználóinkat gyakrabban vegyenek részt/interakciót az alkalmazásunkkal. Használatával tudjuk engedélyezni

  • Értesítési API: Ezzel konfigurálható, hogy a push értesítésünk hogyan jelenjen meg a felhasználó számára.
  • Push API: A szerverünkről a böngészőbe küldött értesítő üzenetek fogadására szolgál.

A push értesítések alkalmazásunkban történő engedélyezésének első lépése az Értesítés API ellenőrzése, és engedélyt kér a felhasználótól az értesítés megjelenítésére. Ehhez másolja ki és illessze be az alábbi kódrészletet a register-service-worker.js fájlba.

if ('Notification' in window && Notification.permission != 'granted') {
    console.log('Ask user permission')
    Notification.requestPermission(status => {  
        console.log('Status:'+status)
        displayNotification('Notification Enabled');
    });
}


const displayNotification = notificationTitle => {
    console.log('display notification')
    if (Notification.permission == 'granted') {
        navigator.serviceWorker.getRegistration().then(reg => {
            console.log(reg)
            const options = {
                    body: 'Thanks for allowing push notification !',
                    icon:  '/assets/icons/icon-512x512.png',
                    vibrate: [100, 50, 100],
                    data: {
                      dateOfArrival: Date.now(),
                      primaryKey: 0
                    }
                  };
    
            reg.showNotification(notificationTitle, options);
        });
    }
};

Ha minden jól ment. Az alkalmazástól értesítést kap.

Az ablakban megjelenő „Notification” (Értesítés) jelzi, hogy az értesítési API támogatott az adott böngészőben. A Notification.permission közli, hogy a felhasználó jogosult-e az értesítés megjelenítésére. Ha a felhasználó engedélyezte az alkalmazásunkat, az érték „megadva” lesz. ha a felhasználó elutasította, az érték „blokkolva” lesz.

Engedélyezze a Firebase felhőalapú üzenetküldést, és hozzon létre előfizetést

Most kezdődik az igazi rész. Az értesítések küldéséhez a szerverről a felhasználóhoz egyedi végpontra/előfizetésre van szükségünk minden felhasználó számára. Ehhez a Firebase felhőalapú üzenetküldést fogjuk használni.

Első lépésként hozzon létre egy Firebase-fiókot a link meglátogatásával https://firebase.google.com/ és nyomja meg az induláshoz.

  • Hozzon létre egy új projektet egy névvel, és nyomja meg a Tovább gombot. Wdzwdz néven fogom létrehozni.
  • A következő lépésben a Google Analytics alapértelmezés szerint engedélyezve van. Bekapcsolhatja, hogy most nincs rá szükségünk, és nyomja meg a Folytatás gombot. Ha szükséges, később engedélyezheti a Firebase-konzolon.
  • A projekt létrehozása után az alábbiak szerint fog kinézni.
  •   Vezérlés kérése a Microsoft Teamsben

    Ezután lépjen a projektbeállításokhoz, kattintson a felhőalapú üzenetküldésre, és hozza létre a kulcsokat.

    A fenti lépésekből 3 kulcsot kap.

    • projekt szerver-kulcs
    • Web push tanúsítványok privát kulcs
    • Web push tanúsítványok nyilvános kulcsa

    Most illessze be az alábbi kódrészletet a register-service-worker.js fájlba:

    const updateSubscriptionOnYourServer = subscription => {
        console.log('Write your ajax code here to save the user subscription in your DB', subscription);
        // write your own ajax request method using fetch, jquery, axios to save the subscription in your server for later use.
    };
    
    const subscribeUser = async () => {
        const swRegistration = await navigator.serviceWorker.getRegistration();
        const applicationServerPublicKey = 'BOcTIipY07N4Y63Y-9r7NMoJHofmCzn3Pu9g-LMsgIMGH4HVr42_LW9ia0lMr68TsTLKS3UcdkE3IcC52hJDYsY'; // paste your webpush certificate public key
        const applicationServerKey = urlB64ToUint8Array(applicationServerPublicKey);
        swRegistration.pushManager.subscribe({
          userVisibleOnly: true,
          applicationServerKey
        })
        .then((subscription) => {
            console.log('User is subscribed newly:', subscription);
            updateSubscriptionOnServer(subscription);
        })
        .catch((err) => {
            if (Notification.permission === 'denied') {
              console.warn('Permission for notifications was denied')
            } else {
              console.error('Failed to subscribe the user: ', err)
            }
        });
    };
    const urlB64ToUint8Array = (base64String) => {
        const padding = '='.repeat((4 - base64String.length % 4) % 4)
        const base64 = (base64String + padding)
            .replace(/-/g, '+')
            .replace(/_/g, '/')
    
        const rawData = window.atob(base64);
        const outputArray = new Uint8Array(rawData.length);
    
        for (let i = 0; i < rawData.length; ++i) {
            outputArray[i] = rawData.charCodeAt(i);
        }
        return outputArray;
    };
    
    const checkSubscription = async () => {
        const swRegistration = await navigator.serviceWorker.getRegistration();
        swRegistration.pushManager.getSubscription()
        .then(subscription => {
            if (!!subscription) {
                console.log('User IS Already subscribed.');
                updateSubscriptionOnYourServer(subscription);
            } else {
                console.log('User is NOT subscribed. Subscribe user newly');
                subscribeUser();
            }
        });
    };
    
    checkSubscription();

    Illessze be az alábbi kódrészletet a service-worker.js fájlba.

    self.addEventListener('push', (event) => {
      const json = JSON.parse(event.data.text())
      console.log('Push Data', event.data.text())
      self.registration.showNotification(json.header, json.options)
    });

    Most minden készen áll az előtérben. Az előfizetés használatával push értesítéseket küldhet a felhasználónak, amikor csak akarja, amíg nem tagadják meg a push szolgáltatásokat.

    Letöltés a node.js háttérprogramból

    Használhatja a web-push npm modult, hogy könnyebb legyen.

    Példa kódrészlet push értesítés küldésére a nodeJS szerverről.

    const webPush = require('web-push');
        // pushSubscription is nothing but subscription that you sent from your front-end to save it in DB
        const pushSubscription = {"endpoint":"https://updates.push.services.mozilla.com/wpush/v2/gAAAAABh2…E0mTFsHtUqaye8UCoLBq8sHCgo2IC7UaafhjGmVCG_SCdhZ9Z88uGj-uwMcg","keys":{"auth":"qX6AMD5JWbu41cFWE3Lk8w","p256dh":"BLxHw0IMtBMzOHnXgPxxMgSYXxwzJPxpgR8KmAbMMe1-eOudcIcUTVw0QvrC5gWOhZs-yzDa4yKooqSnM3rnx7Y"}};
        //your web certificates public-key
        const vapidPublicKey = 'BOcTIipY07N4Y63Y-9r7NMoJHofmCzn3Pu9g-LMsgIMGH4HVr42_LW9ia0lMr68TsTLKS3UcdkE3IcC52hJDYsY';
        //your web certificates private-key
        const vapidPrivateKey = 'web-certificate private key';
    
        var payload = JSON.stringify({
          "options": {
            "body": "PWA push notification testing fom backend",
            "badge": "/assets/icon/icon-152x152.png",
            "icon": "/assets/icon/icon-152x152.png",
            "vibrate": [100, 50, 100],
            "data": {
              "id": "458",
            },
            "actions": [{
              "action": "view",
              "title": "View"
            }, {
              "action": "close",
              "title": "Close"
            }]
          },
          "header": "Notification from etoppc.com-PWA Demo"
        });
    
        var options = {
          vapidDetails: {
            subject: 'mailto:[email protected]',
            publicKey: vapidPublicKey,
            privateKey: vapidPrivateKey
          },
          TTL: 60
        };
    
        webPush.sendNotification(
          pushSubscription,
          payload,
          options
        ).then(data => {
          return res.json({status : true, message : 'Notification sent'});
        }).catch(err => {
          return res.json({status : false, message : err });
        });

    A fenti kód push értesítést küld az előfizetésnek. A szervizmunkásban a push esemény aktiválódik.

    Push a PHP háttérrendszerből

    PHP háttérrendszerhez használhatja a web-push-php zeneszerző csomag. Ellenőrizze az alábbi példakódot a push értesítések küldéséhez.

    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    
    require __DIR__.'/../vendor/autoload.php';
    use MinishlinkWebPushWebPush;
    use MinishlinkWebPushSubscription;
    
    // subscription stored in DB
    $subsrciptionJson = '{"endpoint":"https://updates.push.services.mozilla.com/wpush/v2/gAAAAABh2…E0mTFsHtUqaye8UCoLBq8sHCgo2IC7UaafhjGmVCG_SCdhZ9Z88uGj-uwMcg","keys":{"auth":"qX6AMD5JWbu41cFWE3Lk8w","p256dh":"BLxHw0IMtBMzOHnXgPxxMgSYXxwzJPxpgR8KmAbMMe1-eOudcIcUTVw0QvrC5gWOhZs-yzDa4yKooqSnM3rnx7Y"}}';
    $payloadData = array (
    'options' =>  array (
                    'body' => 'PWA push notification testing fom backend',
                    'badge' => '/assets/icon/icon-152x152.png',
                    'icon' => '/assets/icon/icon-152x152.png',
                    'vibrate' => 
                    array (
                      0 => 100,
                      1 => 50,
                      2 => 100,
                    ),
                    'data' => 
                    array (
                      'id' => '458',
                    ),
                    'actions' => 
                    array (
                      0 => 
                      array (
                        'action' => 'view',
                        'title' => 'View',
                      ),
                      1 => 
                      array (
                        'action' => 'close',
                        'title' => 'Close',
                      ),
                    ),
    ),
    'header' => 'Notification from etoppc.com-PWA Demo',
    );
    
    // auth
    $auth = [
        'GCM' => 'your project private-key', // deprecated and optional, it's here only for compatibility reasons
        'VAPID' => [
            'subject' => 'mailto:[email protected]', // can be a mailto: or your website address
            'publicKey' => 'BOcTIipY07N4Y63Y-9r7NMoJHofmCzn3Pu9g-LMsgIMGH4HVr42_LW9ia0lMr68TsTLKS3UcdkE3IcC52hJDYsY', // (recommended) uncompressed public key P-256 encoded in Base64-URL
            'privateKey' => 'your web-certificate private-key', // (recommended) in fact the secret multiplier of the private key encoded in Base64-URL
        ],
    ];
    
    $webPush = new WebPush($auth);
    
    $subsrciptionData = json_decode($subsrciptionJson,true);
    
    
    // webpush 6.0
    $webPush->sendOneNotification(
      Subscription::create($subsrciptionData),
      json_encode($payloadData) // optional (defaults null)
    );

    Következtetés

    Remélem, ez ötletet ad a webalkalmazások PWA-ba konvertálásához. Ellenőrizheti ennek a cikknek a forráskódját itt és demo azt itt. A push értesítést úgy teszteltem, hogy a háttérből küldtem el, példakód segítségével is.