Allgemein, Interessantes, Nerdkram

Anleitung: Eine Progressive Web App (PWA) erstellen

Diese Anleitung zeigt dir, wie du eine Progressive Web App (PWA) für deine Website erstellst. Eine PWA verbessert die Benutzererfahrung, indem sie eine app-ähnliche Oberfläche und Offline-Unterstützung bietet.

Was ist eine Progressive Web App (PWA)?

Eine PWA ist eine moderne Webanwendung, die:

  • Offline funktioniert dank Caching.
  • Auf dem Home-Bildschirm installierbar ist.
  • Schnell lädt und eine native App-Erfahrung bietet.

Schritt 1: manifest.json erstellen

Die manifest.json definiert die grundlegenden Metadaten der PWA wie Name, Icon und Theme-Farbe.

Erstelle eine Datei namens manifest.json im Root-Verzeichnis der Website:

{
  "name": "Meine PWA",
  "short_name": "PWA",
  "description": "Eine progressive Web App",
  "start_url": "/",
  "display": "standalone",
  "background_color": "#ffffff",
  "theme_color": "#4caf50",
  "icons": [
    {
      "src": "/icons/icon-192x192.png",
      "type": "image/png",
      "sizes": "192x192"
    },
    {
      "src": "/icons/icon-512x512.png",
      "type": "image/png",
      "sizes": "512x512"
    }
  ],
  "scope": "/",
  "orientation": "portrait"
}

Erklärung der wichtigsten Felder:

  • name: Der vollständige Name der Anwendung.
  • short_name: Kürzerer Name für den Home-Bildschirm.
  • start_url: Startpunkt der App.
  • display: standalone sorgt dafür, dass die PWA wie eine native App läuft.
  • icons: Verweise auf App-Icons in verschiedenen Größen.

Verlinkung in der index.html:

<link rel="manifest" href="/manifest.json">

Schritt 2: Service Worker erstellen

Der Service Worker ermöglicht Caching und Offline-Verfügbarkeit.

Erstelle eine Datei namens service-worker.js im Root-Verzeichnis der Website:

const CACHE_NAME = "pwa-cache-v1";
const urlsToCache = [
    "/",
    "/index.html",
    "/manifest.json",
    "/icons/icon-192x192.png",
    "/icons/icon-512x512.png"
];

// Installationsphase
self.addEventListener("install", (event) => {
    event.waitUntil(
        caches.open(CACHE_NAME).then((cache) => {
            return cache.addAll(urlsToCache);
        })
    );
});

// Aktivierung und Cache-Bereinigung
self.addEventListener("activate", (event) => {
    event.waitUntil(
        caches.keys().then((cacheNames) => {
            return Promise.all(
                cacheNames.map((cache) => {
                    if (cache !== CACHE_NAME) {
                        return caches.delete(cache);
                    }
                })
            );
        })
    );
});

// Fetch Event für Offline-Unterstützung
self.addEventListener("fetch", (event) => {
    event.respondWith(
        caches.match(event.request).then((response) => {
            return response || fetch(event.request);
        })
    );
});

Erklärung:

  • Installationsphase: Ressourcen werden beim ersten Besuch gecacht.
  • Aktivierung: Alte Caches werden gelöscht.
  • Fetch-Event: Greift zuerst auf den Cache zu und nutzt nur das Netzwerk, wenn nötig.

Schritt 3: Service Worker im HTML registrieren

Registriere den Service Worker im <head> der index.html:

<script>
if ('serviceWorker' in navigator) {
    navigator.serviceWorker.register('/service-worker.js')
        .then(() => console.log('Service Worker registriert'))
        .catch((error) => console.error('Service Worker Fehler:', error));
}
</script>

Schritt 4: HTTPS sicherstellen

Ein Service Worker funktioniert nur über eine gesicherte HTTPS-Verbindung. Stelle sicher, dass dein Webserver mit einem SSL-Zertifikat ausgestattet ist.


Schritt 5: Cache und Service Worker aktualisieren

  1. Browser-Cache leeren: Entwicklertools → Application → Clear Storage.
  2. Service Worker neu registrieren: Entwicklertools → Application → Service Worker → Unregister.

✅ Zusammenfassung

  • manifest.json für die Metadaten.
  • service-worker.js für Caching und Offline-Funktionen.
  • Verlinkung korrekt im HTML-Header.
  • HTTPS verwenden.

Nach diesen Schritten sollte deine Website erfolgreich als PWA funktionieren. Ein Ergebnis kannst du unter https://shinrainet.de ansehen.

Schreibe eine Antwort