Progressive Web Applications (PWAs) bieten die Reichweite und Zugänglichkeit von Webanwendungen in Kombination mit den Funktionen und der Benutzererfahrung nativer mobiler Apps. Mit Next.js können Sie PWAs erstellen, die auf allen Plattformen ein nahtloses, App-ähnliches Erlebnis bieten, ohne dass mehrere Codebasen oder App Store-Genehmigungen erforderlich sind.
PWAs ermöglichen es Ihnen:
Updates sofort bereitzustellen, ohne auf App Store-Genehmigungen warten zu müssen
Plattformübergreifende Anwendungen mit einer einzigen Codebasis zu erstellen
Native Funktionen wie Startbildschirm-Installation und Push-Benachrichtigungen bereitzustellen
Next.js bietet integrierte Unterstützung für die Erstellung eines Web-App-Manifests mit dem App Router. Sie können eine statische oder dynamische Manifest-Datei erstellen:
Erstellen Sie beispielsweise eine app/manifest.ts oder app/manifest.json-Datei:
Diese Datei sollte Informationen über den Namen, die Symbole und wie sie als Symbol auf dem Gerät des Benutzers angezeigt werden soll, enthalten. Dies ermöglicht es Benutzern, Ihre PWA auf ihrem Startbildschirm zu installieren und bietet ein natives App-ähnliches Erlebnis.
Sie können Tools wie Favicon-Generatoren verwenden, um die verschiedenen Symbolsätze zu erstellen und die generierten Dateien in Ihrem public/-Ordner zu platzieren.
Web-Push-Benachrichtigungen werden von allen modernen Browsern unterstützt, einschließlich:
iOS 16.4+ für auf den Startbildschirm installierte Anwendungen
Safari 16 für macOS 13 oder höher
Chromium-basierte Browser
Firefox
Dies macht PWAs zu einer tragfähigen Alternative zu nativen Apps. Beachtenswert ist, dass Sie Installationsaufforderungen auslösen können, ohne Offline-Unterstützung zu benötigen.
Web-Push-Benachrichtigungen ermöglichen es Ihnen, Benutzer auch dann wieder zu erreichen, wenn sie Ihre App nicht aktiv nutzen. So implementieren Sie sie in einer Next.js-Anwendung:
Zunächst erstellen wir die Hauptseiten-Komponente in app/page.tsx. Wir unterteilen sie in kleinere Teile für ein besseres Verständnis. Fügen wir zunächst einige der Importe und Hilfsfunktionen hinzu. Es ist in Ordnung, dass die referenzierten Server-Aktionen noch nicht existieren:
Fügen wir nun eine Komponente hinzu, um An- und Abmeldung sowie das Senden von Push-Benachrichtigungen zu verwalten.
Zuerst erstellen wir eine Komponente, um iOS-Geräten eine Nachricht anzuzeigen, die sie auffordert, die App auf ihrem Startbildschirm zu installieren, und diese nur anzuzeigen, wenn die App noch nicht installiert ist.
Nun erstellen wir die Server-Aktionen, die diese Datei aufruft.
Erstellen Sie eine neue Datei für Ihre Aktionen unter app/actions.ts. Diese Datei wird das Erstellen, Löschen von Abonnements und das Senden von Benachrichtigungen übernehmen.
Das Senden einer Benachrichtigung wird von unserem Service Worker in Schritt 5 behandelt.
In einer Produktionsumgebung würden Sie das Abonnement in einer Datenbank speichern, um es über Serverneustarts hinweg zu erhalten und Abonnements mehrerer Benutzer zu verwalten.
Erstellen Sie eine public/sw.js-Datei für Ihren Service Worker:
Dieser Service Worker unterstützt benutzerdefinierte Bilder und Benachrichtigungen. Er verarbeitet eingehende Push-Ereignisse und Benachrichtigungsklicks.
Sie können benutzerdefinierte Symbole für Benachrichtigungen mit den Eigenschaften icon und badge festlegen.
Das Vibrationsmuster kann angepasst werden, um benutzerdefinierte Vibrationssignale auf unterstützten Geräten zu erzeugen.
Zusätzliche Daten können mit der data-Eigenschaft an die Benachrichtigung angehängt werden.
Denken Sie daran, Ihren Service Worker gründlich zu testen, um sicherzustellen, dass er auf verschiedenen Geräten und Browsern wie erwartet funktioniert. Stellen Sie außerdem sicher, dass Sie den Link 'https://ihre-website.com' im notificationclick-Ereignislistener durch die entsprechende URL für Ihre Anwendung ersetzen.
Die in Schritt 2 definierte InstallPrompt-Komponente zeigt eine Nachricht für iOS-Geräte, um sie aufzufordern, die App auf ihrem Startbildschirm zu installieren.
Um sicherzustellen, dass Ihre Anwendung auf einem mobilen Startbildschirm installiert werden kann, benötigen Sie:
Ein gültiges Web-App-Manifest (in Schritt 1 erstellt)
Die Website wird über HTTPS bereitgestellt
Moderne Browser zeigen Benutzern automatisch eine Installationsaufforderung an, wenn diese Kriterien erfüllt sind. Sie können eine benutzerdefinierte Installationsschaltfläche mit beforeinstallprompt bereitstellen. Wir empfehlen dies jedoch nicht, da es nicht browserübergreifend und plattformunabhängig funktioniert (funktioniert nicht auf Safari iOS).
Sicherheit ist ein entscheidender Aspekt jeder Webanwendung, insbesondere bei PWAs. Next.js ermöglicht die Konfiguration von Sicherheits-Headern über die next.config.js-Datei. Beispiel:
Werfen wir einen Blick auf die einzelnen Optionen:
Globale Header (für alle Routen angewendet):
X-Content-Type-Options: nosniff: Verhindert MIME-Typ-Sniffing und reduziert das Risiko bösartiger Datei-Uploads.
X-Frame-Options: DENY: Schützt vor Clickjacking-Angriffen, indem die Einbettung der Website in Iframes verhindert wird.
Referrer-Policy: strict-origin-when-cross-origin: Steuert, wie viele Referrer-Informationen mit Anfragen mitgesendet werden und dabei Sicherheit und Funktionalität ausbalanciert.
Service Worker-spezifische Header:
Content-Type: application/javascript; charset=utf-8: Stellt sicher, dass der Service Worker korrekt als JavaScript interpretiert wird.
Cache-Control: no-cache, no-store, must-revalidate: Verhindert das Caching des Service Workers und gewährleistet, dass Benutzer immer die neueste Version erhalten.
Content-Security-Policy: default-src 'self'; script-src 'self': Implementiert eine strikte Content Security Policy für den Service Worker, die nur Skripte aus derselben Quelle zulässt.
PWA-Funktionen erkunden: PWAs können verschiedene Web-APIs nutzen, um erweiterte Funktionalitäten bereitzustellen. Erwägen Sie die Erkundung von Funktionen wie Hintergrundsynchronisation, periodische Hintergrundsynchronisation oder die File System Access API, um Ihre Anwendung zu verbessern. Für Inspiration und aktuelle Informationen zu PWA-Funktionen können Sie Ressourcen wie What PWA Can Do Today konsultieren.
Statische Exports: Wenn Ihre Anwendung keinen Server erfordert und stattdessen eine statische Dateiexport benötigt, können Sie die Next.js-Konfiguration aktualisieren. Weitere Informationen finden Sie in der Next.js-Dokumentation zu statischen Exports. Sie müssen jedoch von Server-Aktionen zu Aufrufen einer externen API wechseln und Ihre definierten Header zu Ihrem Proxy verschieben.
Offline-Unterstützung: Um Offline-Funktionalität bereitzustellen, ist eine Option Serwist mit Next.js. Ein Beispiel für die Integration von Serwist mit Next.js finden Sie in deren Dokumentation. Hinweis: Dieses Plugin erfordert derzeit eine Webpack-Konfiguration.
Sicherheitsüberlegungen: Stellen Sie sicher, dass Ihr Service Worker angemessen gesichert ist. Dies umfasst die Verwendung von HTTPS, die Validierung der Quelle von Push-Nachrichten und die Implementierung einer ordnungsgemäßen Fehlerbehandlung.
Benutzererfahrung: Erwägen Sie die Implementierung von progressiven Verbesserungstechniken, um sicherzustellen, dass Ihre App auch dann gut funktioniert, wenn bestimmte PWA-Funktionen vom Browser des Benutzers nicht unterstützt werden.