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.endpointSchreibgeschützt-
Ein String mit dem Endpunkt, der der Push-Subscription zugeordnet ist.
PushSubscription.expirationTimeSchreibgeschützt-
Ein
DOMHighResTimeStamp, der den Ablaufzeitpunkt der Push-Subscription angibt, sofern einer vorhanden ist; andernfalls null. PushSubscription.optionsSchreibgeschützt-
Ein Objekt mit den Optionen, die zum Erstellen der Subscription verwendet wurden.
PushSubscription.subscriptionIdSchreibgeschützt-
Ein String mit der Subscription-ID, die der Push-Subscription zugeordnet ist.
Instanzmethoden
PushSubscription.getKey()-
Gibt einen
ArrayBufferzurü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 vonJSON.stringify()automatisch aufgerufen. PushSubscription.unsubscribe()-
Startet den asynchronen Vorgang zum Abmelden vom Push-Dienst und gibt ein
Promisezurü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.
// 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
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> |