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 Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨März 2023⁩.

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.

Das PushSubscription-Interface der Push API stellt die URL-Endpunkt einer Abonnements sowie den öffentlichen Schlüssel und die Geheimnisse bereit, die zum Verschlüsseln von Push-Nachrichten an dieses Abonnement verwendet werden sollen. Diese Informationen müssen auf beliebige artenspezifische Weise an den Anwendungsserver übermittelt werden.

Das Interface bietet auch Informationen darüber, wann das Abonnement abläuft, und eine Methode, um das Abonnement zu kündigen.

Instanzeigenschaften

PushSubscription.endpoint Schreibgeschützt

Ein String, der den mit dem Push-Abonnement assoziierten Endpunkt enthält.

PushSubscription.expirationTime Schreibgeschützt

Ein DOMHighResTimeStamp der Gültigkeitsdauer des Abonnements im Zusammenhang mit dem Push-Abonnement, falls vorhanden, oder sonst null.

PushSubscription.options Schreibgeschützt

Ein Objekt, das die zum Erstellen des Abonnements verwendeten Optionen enthält.

PushSubscription.subscriptionId Veraltet Schreibgeschützt Nicht standardisiert

Ein String, der die mit dem Push-Abonnement assoziierte Abonnement-ID enthält.

Instanzmethoden

PushSubscription.getKey()

Gibt ein ArrayBuffer zurück, das den öffentlichen Schlüssel des Clients enthält, der dann an einen Server gesendet und zur Verschlüsselung von Push-Nachrichtendaten verwendet werden kann.

PushSubscription.toJSON()

Standardserializer — gibt eine JSON-Darstellung der Abonnementseigenschaften zurück.

PushSubscription.unsubscribe()

Startet den asynchronen Prozess des Abmeldens vom Push-Dienst und gibt ein Promise zurück, das sich in einen booleschen Wert auflöst, wenn das aktuelle Abonnement erfolgreich abgemeldet wurde.

Beschreibung

Jeder Browser verwendet einen bestimmten Push-Dienst. Ein Service Worker kann PushManager.subscribe() verwenden, um sich beim unterstützten Dienst anzumelden, und die zurückgegebene PushSubscription verwenden, um den Endpunkt zu entdecken, an den Push-Nachrichten gesendet werden sollen.

Das PushSubscription wird auch verwendet, um den öffentlichen Schlüssel und das Geheimnis zu erhalten, die der Anwendungsserver zum Verschlüsseln der Nachrichten verwenden muss, die er an den Push-Dienst sendet. Beachten Sie, dass die privaten Schlüssel, die zum Entschlüsseln von Push-Nachrichten verwendet werden, nicht vom Browser freigegeben werden und zum Entschlüsseln von Nachrichten verwendet werden, bevor sie an den Service Worker übergeben werden. Dies stellt sicher, dass Push-Nachrichten privat bleiben, während sie die Push-Server-Infrastruktur durchlaufen.

Der Service Worker muss nichts über die Endpunkte oder die Verschlüsselung wissen, außer die relevanten Informationen an den Anwendungsserver weiterzugeben. Es kann jeder Mechanismus verwendet werden, um die Informationen mit dem Anwendungsserver zu teilen.

Beispiel

Codierungsinformationen an den Server senden

Der p256dh-öffentliche Schlüssel und das auth-Geheimnis, das zur Verschlüsselung der Nachricht verwendet wird, werden dem Service Worker über sein Push-Abonnement bereitgestellt, indem die Methode PushSubscription.getKey() zusammen mit dem Zielendpunkt zum Senden von Push-Nachrichten in PushSubscription.endpoint verwendet wird. 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 möglicherweise in ein JSON-Objekt einfügen, es mit JSON.stringify() serialisieren und das Ergebnis an den Anwendungsserver senden.

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

Specification
Push API
# pushsubscription-interface

Browser-Kompatibilität

Siehe auch