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.
Das PushSubscription
-Interface der Push API liefert die URL-Endpunkt einer Abonnement zusammen mit dem öffentlichen Schlüssel und Geheimnissen, die zum Verschlüsseln von Push-Nachrichten an dieses Abonnement verwendet werden sollen.
Diese Informationen müssen dem Anwendungsserver mit einer beliebigen, anwendungsspezifischen Methode mitgeteilt werden.
Das Interface liefert auch Informationen darüber, wann das Abonnement abläuft, und eine Methode zum Abbestellen des Abonnements.
Instanzeigenschaften
PushSubscription.endpoint
Schreibgeschützt-
Ein String, der den Endpunkt des Push-Abonnements enthält.
PushSubscription.expirationTime
Schreibgeschützt-
Ein
DOMHighResTimeStamp
, der die Ablaufzeit des Abonnements angibt, wenn vorhanden, oder null, falls nicht. PushSubscription.options
Schreibgeschützt-
Ein Objekt, das die Optionen enthält, die zur Erstellung des Abonnements verwendet wurden.
PushSubscription.subscriptionId
Veraltet Schreibgeschützt Nicht standardisiert-
Ein String, der die mit dem Push-Abonnement verbundene Abonnement-ID enthält.
Instanzmethoden
PushSubscription.getKey()
-
Gibt einen
ArrayBuffer
zurück, der 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()
-
Standard-Serializer — gibt eine JSON-Darstellung der Abonnementeigenschaften zurück.
PushSubscription.unsubscribe()
-
Startet den asynchronen Prozess des Abmeldens vom Push-Dienst und gibt ein
Promise
zurück, das zu einem booleschen Wert aufgelöst wird, 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 das zurückgegebene PushSubscription
nutzen, um den Endpunkt zu ermitteln, 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 zur Verschlüsselung 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 geteilt 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. Jeder Mechanismus kann verwendet werden, um die Informationen mit dem Anwendungsserver zu teilen.
Beispiel
Senden von Kodierungsinformationen an den Server
Der p256dh
öffentliche Schlüssel und das auth
Geheimnis zur Verschlüsselung der Nachricht werden dem Service-Worker über sein Push-Abonnement bereitgestellt, indem die Methode PushSubscription.getKey()
verwendet wird, zusammen mit dem Zielendpunkt zum Versenden 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 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.getKeys('p256dh'),
auth: pushSubscription.getKeys('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