Start · Sprachen · JavaScript · Referenz · PushSubscription.subscriptionId

PushSubscription.subscriptionId

Eigenschaft

Veraltete, schreibgeschützte Eigenschaft, die die Abonnement-ID eines Push-Abonnements als String liefert. Heute ist sie Teil von <code>endpoint</code>.

seit JavaScript Veraltet, nicht standardisiert: nur Chrome 42–44. deprecated seit ja Kategorie: webapi

Signatur

PushSubscription.subscriptionId

Beschreibung

Die schreibgeschützte Eigenschaft subscriptionId der Schnittstelle PushSubscription lieferte in frühen Umsetzungen der Push-API einen String. Er enthielt die Kennung, die der Push-Dienst (damals Google Cloud Messaging, GCM) dem Abonnement zugewiesen hatte. Der Server brauchte diese ID zusammen mit dem Endpunkt, um Push-Nachrichten an genau dieses Gerät bzw. diesen Browser zu schicken.

Die Eigenschaft wurde aus der Spezifikation entfernt. Heute steht die Abonnement-ID direkt in der URL von PushSubscription.endpoint. Moderner Code sollte deshalb nur mit endpoint und den Schlüsseln aus getKey() bzw. toJSON() arbeiten.

Wichtig ist die Eigenschaft nur noch, wenn du alten Code pflegst oder Daten aus Chrome 42–44 übernimmst. Dann kannst du per Feature-Erkennung prüfen, ob subscriptionId vorhanden ist, und sonst auf endpoint ausweichen.

Rückgabewert

Typ
string | undefined
Beschreibung
Die Abonnement-ID als String. In allen aktuellen Browsern gibt es die Eigenschaft nicht, dann ergibt der Zugriff undefined.

Beispiele

Feature-Erkennung: Gibt es subscriptionId noch?

const registration = await navigator.serviceWorker.ready;
const subscription = await registration.pushManager.getSubscription();

if (subscription) {
  if ('subscriptionId' in subscription) {
    console.log('Veraltete ID:', subscription.subscriptionId);
  } else {
    console.log('Nicht vorhanden, bitte endpoint nutzen:', subscription.endpoint);
  }
}
Nicht vorhanden, bitte endpoint nutzen: https://fcm.googleapis.com/fcm/send/dXk3...

Alte Legacy-Daten auf das moderne Format umstellen

// Früher wurden endpoint und subscriptionId getrennt übertragen
const toModernEndpoint = (sub) => {
  const { endpoint, subscriptionId } = sub;
  if (subscriptionId && !endpoint.endsWith(subscriptionId)) {
    return `${endpoint}/${subscriptionId}`;
  }
  return endpoint;
};

console.log(toModernEndpoint({
  endpoint: 'https://android.googleapis.com/gcm/send',
  subscriptionId: 'APA91bH...'
}));
https://android.googleapis.com/gcm/send/APA91bH...

Modern: Abonnement an den Server senden

const registration = await navigator.serviceWorker.ready;
const subscription = await registration.pushManager.subscribe({
  userVisibleOnly: true,
  applicationServerKey: 'BEl62iUYgUivxIkv69yViEuiBIa-Ib9-SkvMeAtA3LFgDzkrxZJjSgSnfckjBJuBkr3qBUYIHBQFLXYp5Nksh8U'
});

// Statt subscriptionId: endpoint und Schlüssel über toJSON()
await fetch('/api/push/subscribe', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify(subscription)
});

// Wichtig · Fallstricke

  • Veraltet und nicht standardisiert: subscriptionId gab es nur in Chrome 42–44. Ab Chrome 45 wurde die Eigenschaft entfernt und die ID an endpoint angehängt. Firefox, Safari und Edge haben sie nie unterstützt.
  • Nicht in neuem Code verwenden. Die ID steckt in der Endpunkt-URL. Den Endpunkt selbst zu zerlegen ist fehleranfällig, weil jeder Push-Dienst ein eigenes URL-Format hat. Behandle endpoint deshalb als undurchsichtigen Wert.
  • Die Push-API gibt es nur in einem sicheren Kontext (HTTPS) und nur mit einem registrierten Service Worker.
  • Sicherheit: Behandle Endpunkt und Abonnement-ID wie vertrauliche Daten. Wer sie kennt, kann zusammen mit den VAPID-Schlüsseln Nachrichten an den Nutzer schicken.