So fügen Sie eine umfassendere Installationsbenutzeroberfläche hinzu

In App-Shops können Entwickler ihre Apps vor der Installation präsentieren. Dazu werden Screenshots und Textinformationen verwendet, die Nutzern bei der Entscheidung helfen, die App zu installieren. Die detailliertere Installations-UI bietet Web-App-Entwicklern eine ähnliche Möglichkeit, Nutzer direkt über den Browser zur Installation ihrer App einzuladen. Diese verbesserte UI ist in Chrome für Android und in Desktop-Umgebungen verfügbar.

Standardprompt

Im folgenden Beispiel sehen Sie die Standardoberfläche, die nicht genügend Kontext bietet.

Das Standardinstallationsdialogfeld des Browsers für den Desktop.
Standarddialogfeld für die Installation auf dem Computer


Das Standardinstallationsdialogfeld des Browsers für Mobilgeräte.
Standarddialogfeld für die Installation auf Mobilgeräten

Detailliertere Installations-UI

Wenn Sie anstelle des regulären kleinen Standardprompts das Dialogfeld für die detailliertere Installations-UI verwenden möchten, fügen Sie Ihrem Web-Manifest die Felder screenshots und description hinzu. Sehen Sie sich dazu das folgende Beispiel für Squoosh.app an:

Detailliertere Installations-UI auf Computern und Mobilgeräten
Detailliertere Installations-UI auf Computern und Mobilgeräten

Das Dialogfeld für die detailliertere Installations-UI besteht aus den Inhalten der Felder description und screenshots im Web-Manifest.

Um das Dialogfeld auszulösen, müssen Sie mindestens einen Screenshot für den entsprechenden Formfaktor hinzufügen. Es wird jedoch empfohlen, auch die Beschreibung hinzuzufügen. Weitere Informationen zu diesen Feldern finden Sie unten.

Screenshots

Screenshots machen die neue Installations-UI wirklich detaillierter. Wir empfehlen daher dringend, sie zu verwenden. In Ihrem Manifest fügen Sie das Element screenshots hinzu, das ein Array mit mindestens einem Bild enthält. Chrome zeigt bis zu acht Bilder an. Hier ein Beispiel:

 "screenshots": [
    {
     "src": "source/image1.png",
      "sizes": "640x320",
      "type": "image/png",
      "form_factor": "wide",
      "label": "Wonder Widgets"
    }
]

Screenshots müssen die folgenden Kriterien erfüllen:

  • Breite und Höhe müssen mindestens 320 Pixel und 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 Wert für den Formfaktor müssen dasselbe Seitenverhältnis haben.
  • Es werden nur die Bildformate JPEG und PNG unterstützt.
  • Es werden nur acht Screenshots angezeigt. Wenn mehr hinzugefügt werden, ignoriert der User-Agent sie einfach.

Außerdem müssen Sie die Größe und den Typ des Bildes angeben, damit es richtig gerendert wird.

Mit form_factor wird dem Browser mitgeteilt, ob der Screenshot auf dem Computer (wide) oder auf Mobilgeräten (narrow) angezeigt werden soll.

Beschreibung

Das Element description beschreibt die Anwendung im Installationsprompt, um den Nutzer dazu aufzufordern, die App zu behalten.

Das Dialogfeld wird auch ohne description angezeigt, es wird jedoch empfohlen, eine Beschreibung hinzuzufügen. Es gibt eine maximale Länge von sieben Textzeilen (ungefähr 324 Zeichen). Längere Beschreibungen werden abgeschnitten und es wird ein Auslassungspunkt angehängt.

{

"description": "Compress and compare images with different codecs
right in your browser."
}
Beschreibung hinzugefügt
Beschreibung hinzugefügt.
Eine längere Beschreibung, die gekürzt wurde.
Längere Beschreibungen werden abgeschnitten.

Die Beschreibung wird oben im Installationsprompt angezeigt.

Wie Sie auf den Screenshots sehen, wird in den Installationsdialogfeldern auch der Ursprung der App aufgeführt. Ursprünge, die zu lang sind, um in die UI zu passen, werden abgeschnitten. Dies wird auch als Auslassung bezeichnet und dient 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();
  });
}