Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

PushSubscription

Baseline
Weitgehend verfügbar

Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit März 2023 browserübergreifend verfügbar.

Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.

Hinweis: Diese Funktion ist in Web Workers verfügbar.

Die PushSubscription-Schnittstelle der Push API stellt den Endpunkt einer Subscription sowie den öffentlichen Schlüssel und die Geheimnisse bereit, die zum Verschlüsseln von Push-Nachrichten für diese Subscription verwendet werden sollen. Diese Informationen müssen mit einer beliebigen anwendungsspezifischen Methode an den Anwendungsserver übermittelt werden.

Die Schnittstelle stellt außerdem Informationen darüber bereit, wann die Subscription abläuft, sowie eine Methode zum Beenden der Subscription.

Instanzeigenschaften

PushSubscription.endpoint Schreibgeschützt

Ein String mit dem Endpunkt, der der Push-Subscription zugeordnet ist.

PushSubscription.expirationTime Schreibgeschützt

Ein DOMHighResTimeStamp, der den Ablaufzeitpunkt der Push-Subscription angibt, sofern einer vorhanden ist; andernfalls null.

PushSubscription.options Schreibgeschützt

Ein Objekt mit den Optionen, die zum Erstellen der Subscription verwendet wurden.

PushSubscription.subscriptionId Schreibgeschützt

Ein String mit der Subscription-ID, die der Push-Subscription zugeordnet ist.

Instanzmethoden

PushSubscription.getKey()

Gibt einen ArrayBuffer zurück, der den öffentlichen Schlüssel des Clients enthält. Dieser kann anschließend an einen Server gesendet und zum Verschlüsseln der Daten von Push-Nachrichten verwendet werden.

PushSubscription.toJSON()

Gibt ein als JSON serialisierbares einfaches Objekt zurück, das das PushSubscription-Objekt darstellt. Wird von JSON.stringify() automatisch aufgerufen.

PushSubscription.unsubscribe()

Startet den asynchronen Vorgang zum Abmelden vom Push-Dienst und gibt ein Promise zurück, das bei erfolgreicher Aufhebung der aktuellen Subscription mit einem booleschen Wert erfüllt wird.

Beschreibung

Jeder Browser verwendet einen bestimmten Push-Dienst. Ein Service Worker kann mit PushManager.subscribe() eine Subscription für den unterstützten Dienst erstellen und anhand der zurückgegebenen PushSubscription den Endpunkt ermitteln, an den Push-Nachrichten gesendet werden sollen.

Die PushSubscription wird auch verwendet, um den öffentlichen Schlüssel und das Geheimnis abzurufen, die der Anwendungsserver zum Verschlüsseln der Nachrichten verwenden muss, die er an den Push-Dienst sendet. Beachten Sie, dass der Browser die privaten Schlüssel zum Entschlüsseln von Push-Nachrichten nicht weitergibt. Die Nachrichten werden damit entschlüsselt, bevor sie an den Service Worker übergeben werden. Dadurch bleiben Push-Nachrichten bei der Übertragung durch die Push-Server-Infrastruktur vertraulich.

Der Service Worker muss weder die Endpunkte noch die Verschlüsselung im Detail kennen; er muss lediglich die relevanten Informationen an den Anwendungsserver weitergeben. Für die Weitergabe der Informationen an den Anwendungsserver kann ein beliebiger Mechanismus verwendet werden.

Beispiel

Verschlüsselungsinformationen an den Server senden

Der öffentliche Schlüssel p256dh und das Geheimnis auth, die zum Verschlüsseln der Nachricht verwendet werden, stehen dem Service Worker über seine Push-Subscription zur Verfügung. Sie werden mit der Methode PushSubscription.getKey() abgerufen; der Zielendpunkt zum Senden von Push-Nachrichten steht in PushSubscription.endpoint. Die für die Verschlüsselung zu verwendende Kodierung wird durch die statische Eigenschaft PushManager.supportedContentEncodings bereitgestellt.

Dieses Beispiel zeigt, wie Sie die benötigten Informationen aus PushSubscription und supportedContentEncodings in ein JSON-Objekt einfügen, es mit JSON.stringify() serialisieren und das Ergebnis an den Anwendungsserver senden können.

js
// Get a PushSubscription object
const pushSubscription =
  await serviceWorkerRegistration.pushManager.subscribe();

// Create an object containing the information needed by the app server
const subscriptionObject = {
  endpoint: pushSubscription.endpoint,
  keys: {
    p256dh: pushSubscription.getKey("p256dh"),
    auth: pushSubscription.getKey("auth"),
  },
  encoding: PushManager.supportedContentEncodings,
  /* other app-specific data, such as user identity */
};

// Stringify the object and post to the app server
fetch("https://example.com/push/", {
  method: "post",
  body: JSON.stringify(subscriptionObject),
});

Von einem Push-Manager abmelden

js
navigator.serviceWorker.ready
  .then((reg) => reg.pushManager.getSubscription())
  .then((subscription) => subscription.unsubscribe())
  .then((successful) => {
    // You've successfully unsubscribed
  })
  .catch((e) => {
    // Unsubscribing failed
  });

Spezifikationen

Spezifikation
Push API
# pushsubscription-interface

Browser-Kompatibilität

Siehe auch