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

PushManager.register()

Methode

Fordert beim System einen neuen Push-Endpunkt an und liefert über einen <code>DOMRequest</code> die Endpunkt-URL, an die ein Server Benachrichtigungen senden kann.

seit JavaScript Nicht standardisiert, veraltet – nur Firefox OS (S deprecated seit ja Kategorie: webapi

Signatur

PushManager.register()

Beschreibung

PushManager.register() gehört zur alten, nicht standardisierten SimplePush-API von Mozilla, die unter Firefox OS über navigator.push verfügbar war. Der Aufruf fordert beim System einen neuen, eindeutigen Endpunkt für Benachrichtigungen an. Diese Endpunkt-URL schickt die App anschließend an ihren eigenen Anwendungsserver, der dann per HTTP-PUT eine Versionsnummer an den Endpunkt senden kann, um die App zu „wecken“.

Die Methode arbeitet nicht mit Promises, sondern gibt ein DOMRequest-Objekt zurück. Das Ergebnis wird im onsuccess-Handler über request.result gelesen; Fehler landen in onerror bzw. request.error. Eingehende Nachrichten wurden über navigator.mozSetMessageHandler('push', …) empfangen, und eine App konnte mehrere Endpunkte registrieren, etwa einen pro Nachrichtenkanal.

Für heutige Webanwendungen ist diese Methode nicht mehr zu verwenden. Der standardisierte Nachfolger ist PushManager.subscribe(), der über ServiceWorkerRegistration.pushManager erreichbar ist, ein Promise<PushSubscription> liefert und in allen modernen Browsern unterstützt wird. Dieser Eintrag dient vor allem dazu, Altcode zu verstehen und zu migrieren.

Rückgabewert

Typ
DOMRequest
Beschreibung
Ein DOMRequest-Objekt. Bei Erfolg enthält request.result die Endpunkt-URL als string, bei einem Fehler enthält request.error ein DOMError.

Beispiele

Endpunkt registrieren (Firefox OS, Altcode)

// Nur unter Firefox OS mit Berechtigung "push" im App-Manifest
if (navigator.push && typeof navigator.push.register === 'function') {
  const request = navigator.push.register();

  request.onsuccess = () => {
    const endpoint = request.result;
    console.log('Neuer Endpunkt:', endpoint);
    // Endpunkt an den eigenen Server übermitteln
    fetch('/api/push-endpoints', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ endpoint })
    });
  };

  request.onerror = () => {
    console.error('Registrierung fehlgeschlagen:', request.error.name);
  };
} else {
  console.log('SimplePush wird nicht unterstützt.');
}
SimplePush wird nicht unterstützt. (in allen modernen Browsern)

DOMRequest in ein Promise verpacken

const registerLegacyPush = () =>
  new Promise((resolve, reject) => {
    if (!navigator.push?.register) {
      reject(new Error('SimplePush nicht verfügbar'));
      return;
    }
    const req = navigator.push.register();
    req.onsuccess = () => resolve(req.result);
    req.onerror = () => reject(req.error);
  });

try {
  const endpoint = await registerLegacyPush();
  console.log('Endpunkt:', endpoint);
} catch (err) {
  console.warn(err.message);
}
SimplePush nicht verfügbar

Moderne Alternative: PushManager.subscribe()

// Standardisierter Ersatz über einen Service Worker
const subscribeToPush = async (vapidPublicKey) => {
  const registration = await navigator.serviceWorker.register('/sw.js');
  const subscription = await registration.pushManager.subscribe({
    userVisibleOnly: true,
    applicationServerKey: vapidPublicKey // Uint8Array oder Base64url-String
  });
  console.log('Endpunkt:', subscription.endpoint);
  await fetch('/api/push-subscriptions', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify(subscription)
  });
  return subscription;
};
Endpunkt: https://fcm.googleapis.com/fcm/send/…

// Wichtig · Fallstricke

  • Veraltet und nicht standardisiert: Die Methode war nur unter Firefox OS (privilegierte/zertifizierte Apps mit der Berechtigung push im Manifest) verfügbar. Kein aktueller Browser unterstützt sie. Verwenden Sie stattdessen PushManager.subscribe().
  • Namenskonflikt: Das heutige Interface PushManager (über registration.pushManager) besitzt keine Methode register(). Ein Aufruf wirft dort einen TypeError. Prüfen Sie Funktionen deshalb immer vorher, zum Beispiel mit typeof navigator.push?.register === 'function'.
  • Kein Promise: Das Ergebnis ist ein DOMRequest, ein await direkt auf den Aufruf funktioniert also nicht. Verpacken Sie ihn bei Bedarf selbst in ein Promise.
  • Sicherheit: Die Endpunkt-URL funktioniert wie ein geheimer Schlüssel. Wer sie kennt, kann der App Benachrichtigungen schicken. Übertragen Sie sie nur per HTTPS und speichern Sie sie auf dem Server geschützt.
  • Endpunkte können vom System ungültig gemacht werden (Systemnachricht push-register). Die App muss sich dann neu registrieren und den Server informieren.