Start · Sprachen · JavaScript · Referenz · BluetoothDevice.id

BluetoothDevice.id

Eigenschaft

Die schreibgeschützte Eigenschaft <code>BluetoothDevice.id</code> liefert eine Zeichenkette, die ein Bluetooth-Gerät innerhalb des aktuellen Ursprungs eindeutig kennzeichnet.

seit JavaScript Experimentell: Chrome/Edge 56+ (Desktop, Android), Kategorie: webapi

Signatur

BluetoothDevice.id

Beschreibung

Die Eigenschaft id eines BluetoothDevice-Objekts enthält eine undurchsichtige Kennung (meist eine Base64-artige Zeichenkette), die der Browser dem Gerät zuweist. Mit ihr lassen sich Geräte in der eigenen Anwendung auseinanderhalten, etwa um mehrere verbundene Sensoren in einer Map zu verwalten oder ein zuvor gewähltes Gerät wiederzuerkennen.

Wichtig: Die id ist nicht die echte Bluetooth-Hardwareadresse (MAC-Adresse). Aus Datenschutzgründen erzeugt der Browser für jeden Ursprung (Origin) eine eigene Kennung. Dasselbe physische Gerät hat auf https://a.example also eine andere id als auf https://b.example. Dadurch lässt sich ein Nutzer nicht über Websites hinweg anhand seiner Geräte verfolgen.

Innerhalb desselben Ursprungs bleibt die Kennung so lange stabil, wie die Berechtigung für das Gerät besteht. In Kombination mit navigator.bluetooth.getDevices() (sofern unterstützt) kann man so ein bereits freigegebenes Gerät nach einem Neuladen der Seite wiederfinden, ohne den Auswahldialog erneut anzuzeigen.

Rückgabewert

Typ
string
Beschreibung
Eine undurchsichtige, pro Ursprung eindeutige Gerätekennung. Schreibgeschützt; Zuweisungen werden ignoriert.

Beispiele

Gerät auswählen und Kennung ausgeben

// Muss durch eine Nutzeraktion (z. B. Klick) ausgelöst werden
const button = document.querySelector('#connect');

button.addEventListener('click', async () => {
  try {
    const device = await navigator.bluetooth.requestDevice({
      filters: [{ services: ['heart_rate'] }]
    });
    console.log(`Name: ${device.name}`);
    console.log(`ID:   ${device.id}`);
  } catch (err) {
    console.error('Auswahl abgebrochen oder fehlgeschlagen:', err);
  }
});
Name: Polar H10 ID: p6b0Hc3N5Qm2yL8vT1kXzA==

Mehrere Geräte anhand der id verwalten

const devices = new Map();

const addDevice = async () => {
  const device = await navigator.bluetooth.requestDevice({
    acceptAllDevices: true,
    optionalServices: ['battery_service']
  });

  if (devices.has(device.id)) {
    console.log('Gerät ist bereits registriert:', device.name);
    return;
  }

  devices.set(device.id, device);
  device.addEventListener('gattserverdisconnected', () => {
    console.log(`Verbindung zu ${device.id} getrennt`);
  });
  console.log(`Registrierte Geräte: ${devices.size}`);
};

document.querySelector('#add').addEventListener('click', addDevice);
Registrierte Geräte: 1

Zuvor freigegebenes Gerät nach Neuladen wiederfinden

const STORAGE_KEY = 'lastBluetoothDeviceId';

const findKnownDevice = async () => {
  const savedId = localStorage.getItem(STORAGE_KEY);
  if (!savedId || !navigator.bluetooth.getDevices) return null;

  const permitted = await navigator.bluetooth.getDevices();
  return permitted.find((d) => d.id === savedId) ?? null;
};

const rememberDevice = (device) => {
  localStorage.setItem(STORAGE_KEY, device.id);
};

const known = await findKnownDevice();
console.log(known ? `Bekannt: ${known.name}` : 'Kein bekanntes Gerät');
Bekannt: Polar H10

// Wichtig · Fallstricke

  • Keine MAC-Adresse: Die id ist eine vom Browser erzeugte, pro Ursprung unterschiedliche Kennung. Sie eignet sich nicht, um Geräte über verschiedene Websites oder Browser hinweg abzugleichen.
  • Stabilität: Widerruft der Nutzer die Berechtigung oder löscht er Websitedaten, kann das Gerät beim nächsten Mal eine neue id erhalten. Gespeicherte Kennungen sollten daher immer mit einer Rückfallstrategie (erneuter Auswahldialog) genutzt werden.
  • Inhalt nicht interpretieren: Das Format ist nicht spezifiziert. Die Zeichenkette nur auf Gleichheit vergleichen, nicht zerlegen.
  • Kompatibilität: Die Web Bluetooth API ist experimentell und nur in Chromium-Browsern (Chrome, Edge, Opera) verfügbar – nicht in Firefox und Safari. Sie erfordert einen sicheren Kontext (HTTPS) und eine Nutzeraktion für requestDevice(). getDevices() ist teils nur hinter einem Flag aktiv.
  • Die Eigenschaft ist schreibgeschützt; eine Zuweisung hat keine Wirkung (im Strict Mode wird ein TypeError geworfen).