PushSubscription
Baseline 2023Newly available
Since March 2023, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
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 die URL des Endpunkts einer Subscription zusammen mit dem Public Key und den Geheimnissen bereit, die verwendet werden sollen, um Push-Nachrichten für diese Subscription zu verschlüsseln. Diese Informationen müssen mit einer beliebigen, anwendungsspezifischen Methode an den Anwendungsserver übermittelt werden.
Die Schnittstelle gibt außerdem Auskunft darüber, wann die Subscription abläuft, und bietet eine Methode, um sich von der Subscription abzumelden.
Instanz-Eigenschaften
PushSubscription.endpoint
Schreibgeschützt-
Ein String, der den Endpunkt enthält, der mit der Push-Subscription verknüpft ist.
PushSubscription.expirationTime
Schreibgeschützt-
Ein
DOMHighResTimeStamp
der Ablaufzeit der Subscription, falls vorhanden, odernull
, falls nicht. PushSubscription.options
Schreibgeschützt-
Ein Objekt, das die Optionen enthält, die für die Erstellung der Subscription verwendet wurden.
PushSubscription.subscriptionId
Veraltet Schreibgeschützt Nicht standardisiert-
Ein String, der die mit der Push-Subscription verknüpfte Subscription-ID enthält.
Instanz-Methoden
PushSubscription.getKey()
-
Gibt einen
ArrayBuffer
zurück, der den öffentlichen Schlüssel des Clients enthält. Dieser kann dann an einen Server gesendet und zur Verschlüsselung von Push-Nachrichtendaten verwendet werden. PushSubscription.toJSON()
-
Standard-Serializer — gibt eine JSON-Darstellung der Subscription-Eigenschaften zurück.
PushSubscription.unsubscribe()
-
Startet den asynchronen Prozess der Abmeldung vom Push-Dienst und gibt ein
Promise
zurück, das auf einen booleschen Wert aufgelöst wird, wenn die aktuelle Subscription 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
nutzen, um den Endpunkt zu ermitteln, an den Push-Nachrichten gesendet werden sollen.
Die PushSubscription
wird auch verwendet, um den öffentlichen Schlüssel und das Geheimnis zu erhalten, die der Anwendungsserver verwenden muss, um die Nachrichten zu verschlüsseln, die er an den Push-Dienst sendet. Es ist wichtig zu beachten, dass die privaten Schlüssel, die zur Entschlüsselung der Push-Nachrichten verwendet werden, vom Browser nicht freigegeben werden. Diese Schlüssel werden verwendet, um Nachrichten zu entschlüsseln, bevor sie an den Service Worker weitergeleitet werden. Dies stellt sicher, dass Push-Nachrichten privat bleiben, während sie durch die Push-Server-Infrastruktur geleitet werden.
Der Service Worker muss nichts über die Endpunkte oder Verschlüsselung wissen, außer die relevanten Informationen an den Anwendungsserver weiterzugeben. Jeglicher Mechanismus kann verwendet werden, um die Informationen mit dem Anwendungsserver zu teilen.
Beispiel
Übermittlung der Kodierungsinformationen an den Server
Der p256dh
-Schlüssel und das auth
-Geheimnis, die zur Verschlüsselung der Nachricht verwendet werden, werden dem Service Worker über seine Push-Subscription bereitgestellt, mit der Methode PushSubscription.getKey()
, zusammen mit dem Ziel-Endpunkt für das Senden von Push-Nachrichten in PushSubscription.endpoint
. Die Kodierung, die für die Verschlüsselung verwendet werden soll, wird durch die statische Eigenschaft PushManager.supportedContentEncodings
bereitgestellt.
Dieses Beispiel zeigt, wie die benötigten Informationen aus PushSubscription
und supportedContentEncodings
in ein JSON-Objekt eingefügt, mit JSON.stringify()
serialisiert und an den Anwendungsserver gesendet werden können.
// 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 an post to the app server
fetch("https://example.com/push/", {
method: "post",
body: JSON.stringify(subscriptionObject),
});
Abmelden von einem Push-Manager
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
BCD tables only load in the browser