Signatur
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
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();
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)));
// 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
versionist nicht auf allen Plattformen verfügbar. Baue deine Logik also nicht darauf auf.