Start · Sprachen · JavaScript · Referenz · Navigator.getInstalledRelatedApps()

Navigator.getInstalledRelatedApps()

Methode

Liefert ein Promise mit einem Array der installierten nativen Apps oder PWAs, die mit der aktuellen Website verknüpft sind (über <code>related_applications</code> im Manifest).

seit JavaScript Experimentell: Chrome/Edge 80+ (Android), teilweis Kategorie: webapi

Signatur

Navigator.prototype.getInstalledRelatedApps()

Beschreibung

navigator.getInstalledRelatedApps() prüft, ob der Nutzer eine App installiert hat, die mit der aktuellen Website verknüpft ist. Das kann eine Android-App aus dem Play Store sein, eine Windows-App (UWP) oder eine Progressive Web App. Zurück kommt ein Promise, das mit einem Array aus Objekten erfüllt wird. Jedes Objekt beschreibt eine gefundene App mit platform, url, id und (optional) version.

Typische Einsätze: Du blendest den eigenen Installationshinweis aus, wenn die App schon installiert ist, verlinkst stattdessen auf „In der App öffnen“ oder vermeidest doppelte Push-Benachrichtigungen aus Website und App.

Die Verknüpfung muss in beide Richtungen bestehen. Das Web-App-Manifest der Website listet die App im Feld related_applications auf. Die App wiederum bestätigt die Website: bei Android über asset_statements bzw. Digital Asset Links, bei Windows über die URI-Handler-Konfiguration und bei PWAs über eine Datei /.well-known/manifest.json oder denselben Ursprung. Gibt es keine gültige Verknüpfung, wird das Promise mit einem leeren Array erfüllt. Es wird also nicht abgelehnt.

Rückgabewert

Typ
Promise<Array<{platform: string, url?: string, id?: string, version?: string}>>
Beschreibung
Ein Promise, das mit einem Array der installierten, verknüpften Apps erfüllt wird. Jedes Objekt hat platform (z. B. "play", "windows", "webapp"), url, id und optional version. Wird nichts gefunden, ist das Array leer.

Beispiele

Installierte verknüpfte Apps auflisten

const listRelatedApps = async () => {
  if (!('getInstalledRelatedApps' in navigator)) {
    console.log('API nicht unterstützt');
    return;
  }
  const apps = await navigator.getInstalledRelatedApps();
  for (const { platform, id, url, version } of apps) {
    console.log(platform, id ?? url, version ?? '');
  }
  if (apps.length === 0) console.log('Keine verknüpfte App installiert');
};

listRelatedApps();
play com.example.shop 3.2.1

Installationsbanner ausblenden, wenn die Android-App vorhanden ist

const banner = document.querySelector('#install-banner');

const updateBanner = async () => {
  if (!('getInstalledRelatedApps' in navigator)) return;
  try {
    const apps = await navigator.getInstalledRelatedApps();
    const hasNativeApp = apps.some(
      (app) => app.platform === 'play' && app.id === 'com.example.shop'
    );
    banner.hidden = hasNativeApp;
  } catch (err) {
    console.warn('Prüfung fehlgeschlagen:', err.name);
  }
};

updateBanner();

Passender Manifest-Eintrag (manifest.webmanifest)

// Inhalt der Manifest-Datei (JSON), hier als JS-Objekt dargestellt
const manifest = {
  name: 'Beispiel-Shop',
  start_url: '/',
  related_applications: [
    { platform: 'play', id: 'com.example.shop',
      url: 'https://play.google.com/store/apps/details?id=com.example.shop' },
    { platform: 'webapp', url: 'https://example.com/manifest.webmanifest' }
  ]
};
console.log(JSON.stringify(manifest.related_applications.map((a) => a.platform)));
["play","webapp"]

// Wichtig · Fallstricke

  • Experimentell und nur in Chromium-Browsern: Chrome und Edge unterstützen die Methode vor allem unter Android, teilweise auch unter Windows. Firefox und Safari kennen sie nicht. Prüfe deshalb immer vorher mit 'getInstalledRelatedApps' in navigator.
  • Die Methode funktioniert nur in einem sicheren Kontext (HTTPS) und nur im obersten Dokument (Top-Level). In iframes wird das Promise abgelehnt, meist mit InvalidStateError.
  • Ein leeres Array bedeutet nicht unbedingt „nicht installiert“. Häufige Ursachen sind eine fehlende oder falsche Rückverknüpfung (Digital Asset Links), ein Manifest, das nicht per <link rel=\"manifest\"> eingebunden ist, oder eine nicht unterstützte Plattform.
  • Datenschutz: Eine Website erfährt nur etwas über Apps, die sie selbst deklariert hat und die sie bestätigen. Browser können die Anzahl der Einträge begrenzen (Chrome: höchstens 3).
  • Das Feld version ist nicht auf allen Plattformen verfügbar. Baue deine Logik also nicht darauf auf.