So fügen Sie eine umfassendere Installationsbenutzeroberfläche hinzu

In App-Shops können Entwickler ihre Apps vor der Installation mit Screenshots und Textinformationen präsentieren, die Nutzern bei der Entscheidung helfen, die App zu installieren. Eine umfassendere Installations-UI bietet Entwicklern von Web-Apps einen ähnlichen Bereich, über den sie Nutzer dazu einladen können, ihre App direkt über den Browser zu installieren. Diese verbesserte Benutzeroberfläche ist in Chrome für Android und Desktop-Umgebungen verfügbar.

Standard-Prompt

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

Das standardmäßige Installationsdialogfeld des Browsers für den Desktop.
Standard-Installationsdialogfeld auf dem Computer


Der standardmäßige Installationsdialog des Browsers auf Mobilgeräten.
Standard-Installationsdialogfeld auf Mobilgeräten

Umfassendere Installations-UI

Wenn du das Dialogfeld mit mehr Installations-UI anstelle der regulären kleinen Standardaufforderung sehen möchtest, füge deinem Web-Manifest die Felder screenshots und description hinzu. Sehen Sie sich das folgende Beispiel für Squoosh.app an:

Umfassendere Installations-UI auf Computern und Mobilgeräten
Umfassendere Installations-UI auf Computern und Mobilgeräten.

Das Dialogfeld „Richer Install UI“ enthält die Inhalte der Felder description und screenshots im Webmanifest.

Damit das Dialogfeld angezeigt wird, müssen Sie nur mindestens einen Screenshot für den entsprechenden Formfaktor hinzufügen. Es wird aber empfohlen, auch eine Beschreibung hinzuzufügen. Weitere Informationen zu diesen Feldern finden Sie unten.

Screenshots

In den Screenshots wird der neuen Installations-UI wirklich der „umfangreichere“ Teil hinzugefügt, den wir dringend empfehlen. Füge in deinem Manifest das screenshots-Mitglied hinzu, das ein Array verwendet, für das mindestens ein Bild erforderlich ist. Chrome zeigt dann bis zu acht Bilder an. Hier ein Beispiel:

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

Screenshots müssen folgende Kriterien erfüllen:

  • Die Breite und Höhe müssen zwischen 320 und 3840 Pixel betragen.
  • Die maximale Dimension darf nicht mehr als 2,3-mal so lang wie die minimale Dimension sein.
  • Alle Screenshots mit demselben Formfaktor-Wert müssen identische Seitenverhältnisse haben.
  • Es werden nur die Bildformate JPEG und PNG unterstützt.
  • Es werden nur acht Screenshots angezeigt. Werden mehr hinzugefügt, ignoriert der User-Agent sie einfach.

Sie müssen auch die Größe und den Typ des Bildes angeben, damit es korrekt gerendert wird. Demo ansehen

Mit form_factor wird dem Browser mitgeteilt, ob der Screenshot auf Computern (wide) oder mobilen Umgebungen (narrow) angezeigt werden soll.

Beschreibung

Das description-Mitglied beschreibt die App in der Installationsaufforderung, um den Nutzer dazu einzuladen, die App zu behalten.

Das Dialogfeld würde auch ohne description angezeigt werden, wird aber empfohlen. Maximal gilt, dass die Anzeige nach 7 Textzeilen (ungefähr 324 Zeichen) eingeblendet wird. Längere Beschreibungen werden abgeschnitten und mit Auslassungspunkten versehen, wie in diesem Beispiel zu sehen ist.

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

Die Beschreibung wird oben in der Installationsaufforderung angezeigt.

Vielleicht ist Ihnen auf den Screenshots aufgefallen, dass in den 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 als Sicherheitsmaßnahme zum Schutz von Nutzern verwendet.

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();
  });
}