@mittlmedien
info@mittl-medien.de
Vorzüge einer Progressive Web App nutzen🤗
Web App - Webseite - Server
Service Worker
Benutzer / Endgerät
Browser
81% weltweit
davon sind 91% im mobilen Bereich 📱
und 69% über Desktop Browser 🖥
Klarer Vorteil, da nahezu betriebssystemunabhängig.
navigator.serviceWorker.register("serviceworker.js")
.then( (registration) => {
setInterval( () => registration.update(), 86400 );
});
Static Files
Network First
Offline First
Network Speed
if (navigator.connection.downlinkMax > 50) { // schnelle Verbindung
}
von Chrome unterstützt - kein Safari
if (navigator.storage && navigator.storage.persist)
navigator.storage.persist().then(function(persistent) {
if (persistent)
console.log("Storage will not be cleared except by explicit user action");
else
console.log("Storage may be cleared by the UA under storage pressure.");
});
Austausch der Daten über Background Sync mit Fallback (Online / Offline)
Zustände des Browsers:
Foreground
Background
(Web Share Target API)
if (navigator.share) {
navigator.share({
title: document.title,
text: 'Hello World',
url: 'https://2019.stuttgart.wordcamp.org/',
});
})
.then(() => {
// do something on success
})
.catch(err => {
// do something on error
});
}
App lädt
App geht in den Hintergrund {visibilitychange}
App wird beendet {freeze}
App wird erneut aufgerufen {resume}
{visibilitychange)
Man kann in die einzelnen Phasen {Events} eingreifen!
12.x 😟
13.x 🙂
<link rel="manifest" href="/manifest.json">
{
"lang": "de",
"name": "Joomla",
"short_name": "Joomla",
"description": "Meine WordPress PWA",
"theme_color": "#99ccff",
"background_color": "#99ccff",
"display": "standalone",
"Scope": "/",
"start_url": "/",
"icons": [
{
"src": "images/icons/icon-72x72.png",
"sizes": "72x72",
"type": "image/png"
},
{
installButton.addEventListener('click', e => {
installPrompt.prompt()
})
let installPrompt
window.addEventListener('beforeinstallprompt', e => {
e.preventDefault()
installPrompt = e;
})
{
"name": "PlayerFM",
"start_url": "https://app.playerfm.com",
…
"shortcuts": [
{
"name": "Play Later",
"description": "View the list of podcasts you saved for later",
"url": "/play-later",
"icons": [
{
"src": "/icons/play-later.svg",
"type": "image/svg+xml",
"purpose": "any"
}
]
},
{
"name": "Subscriptions",
"description": "View the list of podcasts you listen to",
"url": "/subscriptions",
Einfache Anmeldung mit Google, Facebook oder iCloud Konto (OAuth, Auth0)
Einfaches bezahlen mit einmal hinterlegten Informationen
(Apple Pay, Google Pay)
Kommunikation zwischen Client und Service Worker
self.addEventListener('message', messageEvent => {
if (messageEvent.data === 'clean up caches') {
trimCacheAsync(imageCacheName, 50)
trimCacheAsync(pagesCacheName, 30)
}
})
navigator.serviceWorker.controller.postMessage('clean up caches')
Registrierung
Service Worker
Kommunikation zwischen Service Worker und Client
const respondTo = async ({ req, clientId }) => {
const client = await self.clients.get(clientId);
client.postMessage("Hallo Wordcamp Stuttgart");
}
return caches.match(req);
};
navigator.serviceWorker.addEventListener("message", (evt) => {
window.alert(evt.data);
});
Browser / App
Serviceworker
Diese Features beruhen auf der Web Api!
Apple Configurator 2
App Launcher Android - PWA Certified Url
Unternehmen bieten eine Native App und zugleich eine PWA an:
Shopsystem:
wie z.B. "1-800 Flowers" - Blumenshop in US
Gründe:
Google Workbox
Google PWA Training:
https://developers.google.com/web/ilt/pwa/
Bücher:
Jeremy Keith. “Going Offline”
Dean Alan Hume "Progressive Web Apps"
Tal Ater "Building Progressive Web Apps"
info@mittl-medien.de
@mittlmedien
info@mittl-medien.de
@mittlmedien