Häufig gestellte Fragen zu Push-Benachrichtigungen

Matt Gaunt

Warum funktioniert Push nicht, wenn der Browser geschlossen ist?

Diese Frage taucht häufig auf, vor allem, weil es einige Szenarien gibt, die es schwierig machen, sie zu begründen und zu verstehen.

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

Das ist bei jedem Browser unter Android genau gleich: Der Browser wird aktiviert, wenn eine Push-Nachricht empfangen wird. Der Browser aktiviert dann Ihren Service Worker und sendet das Push-Ereignis.

Bei Desktop-Betriebssystemen ist das etwas komplizierter. Am einfachsten lässt es sich anhand von Mac OS X erklären, da es dort eine visuelle Anzeige gibt, die die verschiedenen Szenarien verdeutlicht.

Unter Mac OS X erkennen Sie an einer Markierung unter dem App-Symbol im Dock, ob ein Programm ausgeführt wird oder nicht.

Wenn Sie die beiden Chrome-Symbole im folgenden Dock vergleichen, wird das linke ausgeführt, wie durch die Markierung unter dem Symbol dargestellt. Das rechte Chrome-Symbol wird nicht ausgeführt, daher fehlt die Markierung darunter.

Beispiel für OS X

Wenn Sie Push-Nachrichten auf dem Computer erhalten, werden diese angezeigt, wenn der Browser ausgeführt wird, d.h. wenn sich unter dem Symbol eine Markierung befindet.

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

Push-Benachrichtigungen werden nur dann nicht empfangen, wenn der Browser vollständig geschlossen ist, d.h. überhaupt nicht ausgeführt wird (keine Markierung). Das Gleiche gilt für Windows, obwohl es etwas schwieriger ist, festzustellen, ob Chrome im Hintergrund ausgeführt wird.

Wie kann ich meine Web-App auf dem Startbildschirm so einrichten, dass sie sich über eine Push-Benachrichtigung im Vollbildmodus öffnet?

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

Symbol für Startbildschirm zu Vollbild

Damit die Nutzung einheitlich bleibt, möchten Entwickler, dass ihre angeklickten Benachrichtigungen ihre Web-App ebenfalls im Vollbildmodus öffnen.

Chrome hat dies „irgendwie“ implementiert, aber Sie werden es möglicherweise als unzuverlässig und schwer nachvollziehbar empfinden. Die relevanten Implementierungsdetails sind:

Das bedeutet, dass deine Benachrichtigungen in der normalen Browser-UI geöffnet werden, es sei denn, der Nutzer besucht deine Website ziemlich regelmäßig über das Symbol auf dem Startbildschirm.

An diesem Problem wird weiter gearbeitet.

Warum ist das besser als WebSockets?

Ein Service Worker kann aktiviert werden, wenn das Browserfenster geschlossen ist. Ein WebSocket bleibt nur so lange aktiv, wie der Browser und die Webseite geöffnet sind.

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

Diese Frage hat mehrere Facetten. Am einfachsten lässt sie sich erklären, wenn wir uns die Geschichte von Web-Push und Chrome ansehen. (Keine Sorge, es ist kurz.)

Dezember 2014

Als Web-Push zum ersten Mal in Chrome implementiert wurde, wurde Google Cloud Messaging (GCM) verwendet, um Push-Nachrichten vom Server an den Browser zu senden.

Das war keine Web-Push-Benachrichtigung. Es gibt mehrere Gründe, warum diese frühe Einrichtung von Chrome und GCM kein „echtes“ Web-Push 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 geteilt werden musste, um das Messaging korrekt einzurichten.
  • Die GCM-Server haben eine benutzerdefinierte API-Anfrage akzeptiert, die kein Webstandard war.

Juli 2016

Im Juli wurde eine neue Funktion für Web-Push-Benachrichtigungen eingeführt: Anwendungsserver-Schlüssel (oder VAPID, wie die Spezifikation genannt wird). Als Chrome die Unterstützung für diese neue API hinzugefügt hat, wurde Firebase Cloud Messaging (auch als FCM bezeichnet) anstelle von GCM als Messaging-Dienst verwendet. Das ist aus mehreren Gründen wichtig:

  • Für Chrome- und Anwendungsserverschlüssel muss kein Projekt mit Google oder Firebase eingerichtet werden. Es funktioniert einfach.
  • FCM unterstützt das Web-Push-Protokoll, die API, die von allen Web-Push-Diensten unterstützt wird. Das bedeutet, dass Sie unabhängig vom Push-Dienst, den ein Browser verwendet, immer dieselbe Art von Anfrage stellen und die Nachricht gesendet wird.

Warum ist es heute verwirrend?

Es gibt derzeit viel Verwirrung, da viele Inhalte zum Thema Web-Push geschrieben wurden, von denen sich viele auf GCM oder FCM beziehen. Wenn in Inhalten auf GCM verwiesen wird, ist das wahrscheinlich ein Zeichen dafür, dass es sich entweder um alte Inhalte handelt ODER dass der Fokus zu sehr auf Chrome liegt. (Ich habe das in einigen alten Beiträgen selbst getan.)

Stattdessen besteht Web-Push aus einem Browser, der einen Push-Dienst zum Senden und Empfangen von Nachrichten verwendet. Der Push-Dienst akzeptiert eine Anfrage im „Web-Push-Protokoll“. Wenn Sie so denken, können Sie ignorieren, welcher Browser und welcher Push-Dienst verwendet wird, und sich an die Arbeit machen.

Dieser Leitfaden wurde mit dem Fokus auf den Standardansatz von Web-Push-Benachrichtigungen verfasst und ignoriert bewusst alles andere.

Firebase hat ein JavaScript SDK. Was und warum?

Wenn Sie das Firebase Web SDK gefunden und festgestellt haben, dass es eine Messaging API für JavaScript hat, fragen Sie sich vielleicht, wie es sich von Web-Push unterscheidet.

Das Messaging SDK (Firebase Cloud Messaging JS SDK) bietet einige Funktionen, die die Implementierung von Web-Push-Benachrichtigungen erleichtern.

  • Anstatt sich um ein PushSubscription und seine verschiedenen Felder kümmern zu müssen, müssen Sie sich nur um ein FCM-Token (einen String) kümmern.
  • Mit den Tokens für jeden Nutzer können Sie die proprietäre FCM API verwenden, um Push-Benachrichtigungen auszulösen. Für diese API ist keine Verschlüsselung von Nutzlasten erforderlich. Sie können eine Nur-Text-Nutzlast in einem POST-Anfragetext senden.
  • Die proprietäre API von FCM unterstützt benutzerdefinierte Funktionen, z. B. FCM-Themen. (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, in bestehenden Projekten damit zu arbeiten.

Dabei wird im Hintergrund Web-Push verwendet, aber das Ziel ist es, dies zu abstrahieren.

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

Weitere Informationen

Code labs