App-Shops bieten Entwicklern die Möglichkeit, ihre Apps vor der Installation mit Screenshots und Textinformationen zu präsentieren, die Nutzern bei der Entscheidung helfen, die App zu installieren. Die umfangreichere Installationsoberfläche bietet Entwicklern von Web-Apps einen ähnlichen Platz, um ihre Nutzer zur Installation ihrer App direkt über den Browser einzuladen. Diese verbesserte Benutzeroberfläche ist in Chrome für Android und in Desktopumgebungen verfügbar.
Standardaufforderung
Das Beispiel unten zeigt die Standardoberfläche, die nicht genügend Kontext bietet.
<ph type="x-smartling-placeholder">![Das Standard-Installationsdialogfeld des Browsers für den Desktop.](https://web.dev/static/patterns/web-apps/richer-install-ui/images/y5sNbIN19bPNbqni3xay.png?authuser=6&hl=de)
![Das Standard-Installationsdialogfeld des Browsers für Mobilgeräte.](https://web.dev/static/patterns/web-apps/richer-install-ui/images/yshUdzH27Gm1Rzdj9s8O.png?authuser=6&hl=de)
Umfassendere Installations-UI
Wenn Sie das Dialogfeld für die umfangreichere Installationsoberfläche statt der regulären kleinen Standardaufforderung aufrufen möchten, fügen Sie Ihrem Webmanifest die Felder screenshots
und description
hinzu. Sehen Sie sich das folgende Squoosh.app-Beispiel an:
![Umfassendere Installations-UI für Computer und Mobilgeräte](https://web.dev/static/patterns/web-apps/richer-install-ui/images/5SlCnibmZHqkXdGVgPZY.jpeg?authuser=6&hl=de)
Das Dialogfeld „Umfassender Installations-UI“ enthält den Inhalt der Felder description
und screenshots
im Webmanifest.
Um das Dialogfeld zu öffnen, müssen Sie nur mindestens einen Screenshot für den entsprechenden Formfaktor hinzufügen. Es wird jedoch empfohlen, auch eine Beschreibung hinzuzufügen. Unten finden Sie die Einzelheiten zu diesen Feldern.
Screenshots
Screenshots ergänzen die der neuen Installations-UI und empfehlen wir dringend, sie zu verwenden. Füge dem Manifest das Mitglied screenshots
hinzu. Für ein Array, für das mindestens ein Bild erforderlich ist, werden in Chrome bis zu acht Bilder angezeigt. Hier ein Beispiel:
"screenshots": [
{
"src": "source/image1.png",
"sizes": "640x320",
"type": "image/png",
"form_factor": "wide",
"label": "Wonder Widgets"
}
]
Screenshots müssen folgende Kriterien erfüllen:
- Breite und Höhe müssen mindestens 320 und darf höchstens 3.840 Pixel betragen.
- Die Maximalgröße darf nicht mehr als das 2,3-Fache der Mindestgröße betragen.
- Alle Screenshots mit demselben Formfaktorwert müssen identische Seitenverhältnisse haben.
- Es werden nur die Bildformate JPEG und PNG unterstützt.
- Es werden nur acht Screenshots angezeigt. Werden weitere hinzugefügt, ignoriert der User-Agent sie einfach.
Damit das Bild korrekt gerendert wird, müssen Sie auch die Größe und den Typ des Bildes angeben. Demo ansehen
Das form_factor
gibt dem Browser an, ob der Screenshot auf einem Computer (wide
) oder in einer mobilen Umgebung (narrow
) angezeigt werden soll.
Beschreibung
Das Mitglied description
beschreibt die Anwendung in der Installationsaufforderung, um den Nutzer dazu einzuladen, die App zu behalten.
Das Dialogfeld wird auch ohne description
angezeigt, dies wird aber empfohlen.
Nach sieben Textzeilen (etwa 324 Zeichen) wird ein Maximum an 7 Textzeilen (etwa 324 Zeichen) verwendet. Längere Beschreibungen werden abgeschnitten und mit Auslassungspunkten versehen (siehe dieses Beispiel).
{
…
"description": "Compress and compare images with different codecs
right in your browser."
}
![Beschreibung hinzugefügt](https://web.dev/static/patterns/web-apps/richer-install-ui/images/oOj7Ls7cQ8E274faxfOz.jpg?authuser=6&hl=de)
![Eine längere Beschreibung, die abgeschnitten wurde.](https://web.dev/static/patterns/web-apps/richer-install-ui/images/Dpzs03K6QmBkZaefX2nU.jpg?authuser=6&hl=de)
Die Beschreibung wird oben in der Installationsaufforderung angezeigt.
Vielleicht haben Sie anhand der Screenshots bemerkt, dass in Installationsdialogfeldern auch der Ursprung der App aufgeführt ist. Ursprünge, die zu lang für die Benutzeroberfläche sind, werden abgeschnitten. Dies wird auch als Eliding bezeichnet und verwendet. als Sicherheitsmaßnahme zum Schutz der Nutzer.
Weitere Informationen
Demo
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="color-scheme" content="dark light" />
<link rel="manifest" href="manifest.json" />
<title>How to add Richer Install UI to your web app</title>
<!-- TODO: Devsite - Removed inline handlers -->
<!-- <script>
if ('serviceWorker' in navigator) {
window.addEventListener('load', () => {
navigator.serviceWorker.register('sw.js');
});
}
</script>
<script type="module" src="script.js"></script> -->
</head>
<body>
<h1>How to add Richer Install UI to your web app</h1>
<ol>
<li>
Install the app by clicking the button below. After the installation,
the button is disabled.
<p>
<button disabled type="button">Install</button>
</p>
</li>
<li>
When you click on install a dialog similar to the ones from app stores
will be displayed.
</li>
<li>
The dialog includes the `description` and `screenshots` set in the app
manifest.
</li>
<li>
Screenshots should be different depending if the app is being installed
on a mobile or desktop device, according to the `form_factor` value set
for the screenshots on the manifest
</li>
</ol>
</body>
</html>
JS
// The install button.
const installButton = document.querySelector('button');
// Only relevant for browsers that support installation.
if ('BeforeInstallPromptEvent' in window) {
// Variable to stash the `BeforeInstallPromptEvent`.
let installEvent = null;
// Function that will be run when the app is installed.
const onInstall = () => {
// Disable the install button.
installButton.disabled = true;
// No longer needed.
installEvent = null;
};
window.addEventListener('beforeinstallprompt', (event) => {
// Do not show the install prompt quite yet.
event.preventDefault();
// Stash the `BeforeInstallPromptEvent` for later.
installEvent = event;
// Enable the install button.
installButton.disabled = false;
});
installButton.addEventListener('click', async () => {
// If there is no stashed `BeforeInstallPromptEvent`, return.
if (!installEvent) {
return;
}
// Use the stashed `BeforeInstallPromptEvent` to prompt the user.
installEvent.prompt();
const result = await installEvent.userChoice;
// If the user installs the app, run `onInstall()`.
if (result.outcome === 'accepted') {
onInstall();
}
});
// The user can decide to ignore the install button
// and just use the browser prompt directly. In this case
// likewise run `onInstall()`.
window.addEventListener('appinstalled', () => {
onInstall();
});
}