Start · Sprachen · JavaScript · Referenz · PushManager.unregister()

PushManager.unregister()

Methode

Bat das System, einen per <code>register()</code> angelegten Push-Endpunkt abzumelden und zu löschen. Veraltet, heute gilt <code>PushSubscription.unsubscribe()</code>.

seit JavaScript Veraltet (nicht standardisiert): nur im alten Fire deprecated seit ja Kategorie: webapi

Signatur

PushManager.unregister(pushEndpoint)

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

Typ
DOMRequest
Beschreibung
Ein 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');
}
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);
Push-Abonnement beendet

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);
Push deaktiviert für https://updates.push.services.mozilla.com/wpush/v2/…

// Wichtig · Fallstricke

  • Veraltet und entfernt: unregister() war nie Teil eines Standards und ist in keinem aktuellen Browser vorhanden, auch nicht in Firefox. Stattdessen PushSubscription.unsubscribe() verwenden.
  • Die alte API lief über navigator.push und DOMRequest, nicht über Promises und nicht über ServiceWorkerRegistration.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).