Signatur
Beschreibung
Die Methode unregister() gehörte zur frühen, nicht standardisierten Push-API aus Firefox OS (SimplePush). Mit ihr konnte eine App dem System mitteilen, dass ein bestimmter Push-Endpunkt nicht mehr gebraucht wird. Das System meldete den Endpunkt dann beim Push-Server ab und löschte ihn. Nachrichten an diese URL wurden danach nicht mehr zugestellt.
Der Aufruf lieferte ein DOMRequest-Objekt zurück. Bei Erfolg lag im Ergebnis (request.result) ein PushRegistration-Objekt mit den Eigenschaften pushEndpoint und version. Scheiterte der Aufruf, wurde onerror ausgelöst.
Diese Methode ist veraltet und wurde aus allen Browsern entfernt. In der standardisierten Push API meldet man sich ab, indem man mit PushManager.getSubscription() das aktuelle PushSubscription-Objekt holt und darauf unsubscribe() aufruft. Das gibt ein Promise<boolean> zurück. Neuer Code sollte ausschließlich diesen Weg nutzen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $pushEndpoint Pflicht | string | Die URL des Push-Endpunkts, der abgemeldet werden soll, also der Wert von pushEndpoint einer früheren Registrierung über register() oder registrations(). |
Rückgabewert
DOMRequest, das bei Erfolg onsuccess auslöst. request.result enthält dann ein PushRegistration-Objekt ({ pushEndpoint, version }) des abgemeldeten Endpunkts. Bei einem Fehler wird onerror ausgelöst.Beispiele
Veralteter Aufruf (Firefox OS / SimplePush) mit Feature-Erkennung
// Nur zur Veranschaulichung: navigator.push gibt es in heutigen Browsern nicht mehr
const endpoint = localStorage.getItem('pushEndpoint');
if (navigator.push && typeof navigator.push.unregister === 'function' && endpoint) {
const req = navigator.push.unregister(endpoint);
req.onsuccess = () => {
const { pushEndpoint } = req.result;
console.log(`Abgemeldet: ${pushEndpoint}`);
localStorage.removeItem('pushEndpoint');
};
req.onerror = () => {
console.error('Abmelden fehlgeschlagen:', req.error?.name);
};
} else {
console.log('Legacy-API navigator.push.unregister() nicht verfügbar');
}
Moderner Ersatz: PushSubscription.unsubscribe()
const unsubscribePush = async () => {
const registration = await navigator.serviceWorker.ready;
const subscription = await registration.pushManager.getSubscription();
if (!subscription) {
console.log('Kein aktives Push-Abonnement');
return false;
}
const ok = await subscription.unsubscribe();
console.log(ok ? 'Push-Abonnement beendet' : 'Abmelden fehlgeschlagen');
return ok;
};
unsubscribePush().catch(console.error);
Abmelden und den Server informieren
const disablePush = async () => {
const registration = await navigator.serviceWorker.ready;
const subscription = await registration.pushManager.getSubscription();
if (!subscription) return;
const { endpoint } = subscription;
await subscription.unsubscribe();
// Backend entfernt den Endpunkt aus seiner Datenbank
await fetch('/api/push/unsubscribe', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ endpoint })
});
console.log('Push deaktiviert für', endpoint);
};
document.querySelector('#push-off')?.addEventListener('click', disablePush);
// Wichtig · Fallstricke
- Veraltet und entfernt:
unregister()war nie Teil eines Standards und ist in keinem aktuellen Browser vorhanden, auch nicht in Firefox. StattdessenPushSubscription.unsubscribe()verwenden. - Die alte API lief über
navigator.pushundDOMRequest, nicht über Promises und nicht überServiceWorkerRegistration.pushManager. Code lässt sich also nicht einfach umbenennen, sondern muss auf den Service-Worker-Ablauf umgestellt werden. - Das Abmelden im Browser entfernt den Endpunkt nicht automatisch aus deiner eigenen Server-Datenbank. Den Server deshalb ausdrücklich informieren. Sendet der Server trotzdem weiter an den alten Endpunkt, antwortet der Push-Dienst in der Regel mit HTTP 404 oder 410. Den Endpunkt dann löschen.
- Die moderne Push API braucht einen sicheren Kontext (HTTPS) und einen registrierten Service Worker. Safari unterstützt sie ab Version 16 (macOS) bzw. 16.4 (iOS, nur für Web-Apps, die zum Home-Bildschirm hinzugefügt wurden).