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

PushManager.registrations()

Methode

Fragt das System nach allen bestehenden Push-Endpunkt-Registrierungen der App und liefert sie asynchron über einen <code>DOMRequest</code>.

seit JavaScript Nicht standardisiert, veraltet: nur Firefox OS / G deprecated seit ja Kategorie: webapi

Signatur

navigator.push.registrations()

Beschreibung

PushManager.registrations() gehört zur alten, nicht standardisierten Simple Push API von Mozilla. Diese API war unter navigator.push nur in Firefox OS verfügbar. Mit der Methode konnte eine App herausfinden, welche Push-Endpunkte sie zuvor mit navigator.push.register() angelegt hatte, und zwar ohne neue Endpunkte zu erzeugen.

Der Aufruf gibt sofort ein DOMRequest-Objekt zurück. Ist die Anfrage erfolgreich, wird onsuccess ausgelöst. In request.result steht dann ein Array von Registrierungsobjekten. Jedes Objekt hat die Eigenschaften pushEndpoint (die URL, an die der App-Server Benachrichtigungen schickt) und version (die zuletzt empfangene Versionsnummer der Benachrichtigung). Schlägt die Anfrage fehl, wird onerror ausgelöst.

Man brauchte die Methode vor allem nach einem Neustart der App oder nach dem Systemereignis push-register. Dabei wurden bekannte Endpunkte mit dem eigenen Server abgeglichen und bei Bedarf neu registriert. In aktuellem Code sollte man sie nicht mehr verwenden. Der Ersatz ist die standardisierte Push API mit ServiceWorkerRegistration.pushManager.getSubscription(). Sie liefert ein Promise mit dem aktuellen PushSubscription-Objekt oder null.

Rückgabewert

Typ
DOMRequest
Beschreibung
Ein DOMRequest. Bei Erfolg enthält result ein Array von Objekten der Form { pushEndpoint: string, version: number }. Hat die App keine Registrierungen, ist das Array leer.

Beispiele

Bestehende Registrierungen auflisten (Firefox OS, veraltet)

// Nur in alten Firefox-OS-Umgebungen mit navigator.push vorhanden
if (navigator.push && typeof navigator.push.registrations === 'function') {
  const req = navigator.push.registrations();

  req.onsuccess = () => {
    const regs = req.result;
    console.log(`Anzahl Registrierungen: ${regs.length}`);
    regs.forEach(({ pushEndpoint, version }) => {
      console.log(`Endpunkt: ${pushEndpoint} (Version ${version})`);
    });
  };

  req.onerror = () => {
    console.error('Fehler beim Abfragen:', req.error?.name);
  };
} else {
  console.log('Simple Push API nicht verfügbar');
}
Simple Push API nicht verfügbar // in Firefox OS z. B.: // Anzahl Registrierungen: 1 // Endpunkt: https://updates.push.services.mozilla.com/update/abc123 (Version 3)

DOMRequest in ein Promise einpacken und mit dem Server abgleichen

const getRegistrations = () =>
  new Promise((resolve, reject) => {
    const req = navigator.push.registrations();
    req.onsuccess = () => resolve(req.result);
    req.onerror = () => reject(req.error);
  });

const syncEndpoints = async () => {
  const regs = await getRegistrations();
  if (regs.length === 0) {
    // Noch kein Endpunkt – neu registrieren
    const req = navigator.push.register();
    req.onsuccess = () => sendToServer(req.result);
    return;
  }
  await Promise.all(regs.map((r) => sendToServer(r.pushEndpoint)));
};

const sendToServer = (endpoint) =>
  fetch('/api/push-endpoints', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ endpoint })
  });

if (navigator.push) syncEndpoints().catch(console.error);

Moderner Ersatz: getSubscription() der standardisierten Push API

const checkSubscription = async () => {
  if (!('serviceWorker' in navigator) || !('PushManager' in window)) {
    console.log('Push API nicht unterstützt');
    return null;
  }
  const registration = await navigator.serviceWorker.ready;
  const subscription = await registration.pushManager.getSubscription();

  if (subscription) {
    console.log('Aktiver Endpunkt:', subscription.endpoint);
  } else {
    console.log('Keine bestehende Push-Subscription');
  }
  return subscription;
};

checkSubscription();
Aktiver Endpunkt: https://fcm.googleapis.com/fcm/send/… // oder: Keine bestehende Push-Subscription

// Wichtig · Fallstricke

  • Veraltet und nicht standardisiert: navigator.push.registrations() gab es nur in Firefox OS bzw. bei privilegierten Gecko-Apps. Kein aktueller Browser bietet die Methode an. Der heutige PushManager (registration.pushManager) hat keine Methode registrations().
  • Rückgabe ist ein DOMRequest und kein Promise. await funktioniert deshalb nicht direkt; wer async/await nutzen will, muss den Aufruf selbst in ein Promise einpacken.
  • In Firefox OS brauchte die App die Berechtigung push im Manifest und musste die Systemnachrichten push und push-register behandeln. Nach push-register waren alte Endpunkte ungültig und mussten neu angelegt werden.
  • Für neue Projekte: Service Worker registrieren, dann mit pushManager.getSubscription() die bestehende Subscription prüfen und bei Bedarf mit pushManager.subscribe({ userVisibleOnly: true, applicationServerKey }) eine neue anlegen. Das funktioniert nur in einem sicheren Kontext (HTTPS).
  • Endpunkt-URLs sind geheim zu halten: Wer die URL kennt, kann der App Benachrichtigungen schicken. Übertrage sie deshalb nur verschlüsselt an den eigenen Server.