Signatur
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
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.');
}
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);
}
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;
};
// Wichtig · Fallstricke
- Veraltet und nicht standardisiert: Die Methode war nur unter Firefox OS (privilegierte/zertifizierte Apps mit der Berechtigung
pushim Manifest) verfügbar. Kein aktueller Browser unterstützt sie. Verwenden Sie stattdessenPushManager.subscribe(). - Namenskonflikt: Das heutige Interface
PushManager(überregistration.pushManager) besitzt keine Methoderegister(). Ein Aufruf wirft dort einenTypeError. Prüfen Sie Funktionen deshalb immer vorher, zum Beispiel mittypeof navigator.push?.register === 'function'. - Kein Promise: Das Ergebnis ist ein
DOMRequest, einawaitdirekt 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.