Häufig gestellte Fragen zu Push-Benachrichtigungen

Matt Gaunt

Warum funktioniert die Push-Funktion nicht, wenn der Browser geschlossen ist?

Diese Frage kommt sehr häufig auf, vor allem, weil es einige Szenarien gibt, die das Denken und Verstehen schwer erschweren.

Beginnen wir mit Android. Das Android-Betriebssystem ist so konzipiert, dass es auf Push-Nachrichten wartet und beim Empfang einer Push-Nachricht die entsprechende Android-App aktiviert, um die Push-Nachricht zu verarbeiten, unabhängig davon, ob die App geschlossen ist oder nicht.

Dies ist genau dasselbe wie bei jedem anderen Browser unter Android. Der Browser wird beim Empfang einer Push-Nachricht aktiviert und der Browser aktiviert dann den Service Worker und löst das Push-Ereignis aus.

Bei Desktop-Betriebssystemen ist dies differenzierter und einfacher zu erklären unter Mac OS X, da es einen visuellen Indikator zur Erläuterung der verschiedenen Szenarien gibt.

Unter Mac OS X können Sie anhand einer Markierung unter dem App-Symbol im Dock feststellen, ob ein Programm ausgeführt wird.

Wenn Sie die beiden Chrome-Symbole im folgenden Dock vergleichen, wird das linke Symbol ausgeführt (wie an der Markierung unter dem Symbol zu erkennen). Chrome rechts läuft nicht, daher fehlt die Markierung darunter.

Beispiel für OS X

Im Kontext von Push-Nachrichten auf dem Desktop erhalten Sie Nachrichten, wenn der Browser ausgeführt wird, d.h. mit der Markierung unter dem Symbol.

Das bedeutet, dass im Browser keine Fenster geöffnet sein dürfen und Sie trotzdem die Push-Nachricht in Ihrem Service Worker erhalten, da der Browser im Hintergrund ausgeführt wird.

Die Übertragung wird nur dann nicht empfangen, wenn der Browser vollständig geschlossen ist, d.h. überhaupt nicht ausgeführt wird (keine Markierung). Dasselbe gilt für Windows, allerdings ist es etwas schwieriger festzustellen, ob Chrome im Hintergrund ausgeführt wird.

Wie öffne ich meine Startbildschirm-Webanwendung über eine Push-Funktion im Vollbildmodus?

In Chrome für Android kann eine Web-App zum Startbildschirm hinzugefügt werden. Wenn die Web-App auf dem Startbildschirm geöffnet wird, kann sie im Vollbildmodus ohne URL-Leiste gestartet werden, wie unten dargestellt.

Startbildschirmsymbol für Vollbild

Damit dies konsistent bleibt, möchten Entwickler, dass ihre angeklickten Benachrichtigungen auch im Vollbildmodus ihrer Web-App geöffnet werden.

Chrome hat dies implementiert, obwohl Sie es möglicherweise als unzuverlässig und schwer zu verstehen empfinden. Die relevanten Implementierungsdetails:

Dies bedeutet, dass Benachrichtigungen in der normalen Browser-Benutzeroberfläche geöffnet werden, es sei denn, Nutzer besuchen Ihre Website regelmäßig über das Startbildschirmsymbol.

Wir werden dieses Problem weiter untersuchen.

Warum ist dies besser als Web-Sockets?

Ein Service Worker kann mit geschlossenem Browserfenster zum Leben erweckt werden. Ein WebSocket funktioniert nur so lange, wie der Browser und die Webseite geöffnet sind.

Was hat es mit GCM, FCM, Web Push und Chrome auf sich?

Diese Frage hat einige Facetten. Am einfachsten lässt sie sich erklären, indem wir die Geschichte von Web-Push und Chrome durchgehen. (Keine Sorge, die Beschreibung ist kurz.)

Dezember 2014

Bei der erstmaligen Implementierung von Web-Push nutzte Chrome Google Cloud Messaging (GCM) für das Senden von Push-Nachrichten vom Server zum Browser.

Dies war kein Web-Push. Es gibt mehrere Gründe, warum diese frühe Einrichtung von Chrome und GCM keine "echte" Web-Push-Methode war.

  • Für GCM müssen Entwickler ein Konto in der Google Developers Console einrichten.
  • Chrome und GCM benötigten eine spezielle Absender-ID, die von einer Web-App freigegeben wurde, um die Nachrichtenfunktion richtig einrichten zu können.
  • Die GCM-Server haben eine benutzerdefinierte API-Anfrage akzeptiert, die kein Webstandard war.

Juli 2016

Im Juli wurde eine neue Web-Push-Funktion eingeführt: Anwendungsserverschlüssel (oder VAPID, wie die Spezifikation bekannt ist). Als Chrome diese neue API unterstützt, wurde Firebase Cloud Messaging (auch FCM genannt) anstelle von GCM als Messaging-Dienst verwendet. Dies ist aus mehreren Gründen wichtig:

  • Chrome- und Anwendungs-Serverschlüssel müssen kein Projekt für Google oder Firebase einrichten. Es wird einfach funktionieren.
  • FCM unterstützt das Web Push-Protokoll, die API, die von allen Web-Push-Diensten unterstützt wird. Das bedeutet, dass unabhängig davon, welchen Push-Dienst ein Browser verwendet, nur die gleiche Art von Anfrage gestellt wird und die Nachricht gesendet wird.

Warum findest du das heute verwirrend?

Es gibt mittlerweile große Verwirrung, dass Inhalte zum Thema Web-Push geschrieben wurden, von denen viele auf GCM oder FCM verweisen. Wenn Inhalte auf GCM verweisen, solltest du dies wahrscheinlich als Zeichen dafür betrachten, dass es sich entweder um alte Inhalte handelt ODER es sich zu sehr um Chrome handelt. (Das habe ich bei einigen alten Beiträgen getan.)

Stellen Sie sich Web-Push als Browser vor, der das Senden und Empfangen von Nachrichten mit einem Push-Dienst verwaltet und der Push-Dienst eine "Web-Push-Protokoll"-Anfrage akzeptiert. Wenn Sie so denken, können Sie ignorieren, welchen Browser und welchen Push-Dienst er verwendet, und können loslegen.

Dieser Leitfaden konzentriert sich auf den Standardansatz für Web-Push und ignoriert absichtlich alles andere.

Firebase hat ein JavaScript SDK. Was und warum?

Diejenigen unter Ihnen, die das Firebase Web SDK gefunden haben und festgestellt haben, dass es eine Messaging-API für JavaScript enthält, fragen sich vielleicht, inwiefern es sich von Web-Push unterscheidet.

Das Messaging SDK (bekannt als Firebase Cloud Messaging JS SDK) führt hinter den Kulissen ein paar Tricks durch, um die Implementierung von Web-Push zu vereinfachen.

  • Sie müssen sich nicht mehr um ein PushSubscription und die verschiedenen Felder kümmern, sondern nur um ein FCM-Token (einen String).
  • Wenn Sie die Tokens für jeden Nutzer verwenden, können Sie die proprietäre FCM API zum Auslösen von Push-Nachrichten verwenden. Diese API erfordert keine Verschlüsselung von Nutzlasten. Sie können eine Nur-Text-Nutzlast im Text einer POST-Anfrage senden.
  • Die proprietäre API von FCM unterstützt benutzerdefinierte Funktionen, z. B. FCM Topics. Sie funktioniert auch im Web, ist aber schlecht dokumentiert.
  • Schließlich unterstützt FCM Android, iOS und das Web, sodass es für einige Teams einfacher ist, mit vorhandenen Projekten zu arbeiten.

Dabei wird ein Web-Push im Hintergrund verwendet, aber das Ziel besteht darin, den Hintergrund abzustrahieren.

Wie in der vorherigen Frage erwähnt, können Sie das Messaging SDK in Firebase als Bibliothek betrachten, wenn Sie Web-Push nur als Browser und Push-Dienst betrachten, um die Implementierung von Web-Push zu vereinfachen.

Weitere Informationen

Code-Labs