Jak dodać bardziej rozbudowany interfejs instalacji

Sklepy z aplikacjami zapewniają deweloperom miejsce, w którym deweloperzy mogą zaprezentować swoje aplikacje przed instalacją, za pomocą zrzutów ekranu i informacji tekstowych, które pomagają użytkownikowi podjąć decyzję o zainstalowaniu. Bogaty interfejs instalacji zapewnia podobną przestrzeń do zapraszania użytkowników do zainstalowania aplikacji bezpośrednio z przeglądarki. Ten ulepszony interfejs jest dostępny w Chrome na Androida i na komputerach.

Domyślny prompt

Poniżej znajdziesz przykład domyślny, który nie zapewnia wystarczającego kontekstu.

Domyślne okno instalacji przeglądarki na komputerze.
Domyślne okno instalacji na komputerze


Domyślne okno instalacji przeglądarki na urządzeniu mobilnym.
Domyślne okno instalacji na urządzeniu mobilnym

Większy interfejs instalacji

Aby zamiast zwykłego, domyślnego promptu uzyskać dostęp do bogatszego okna dialogowego instalacji, dodaj do swojego internetowego pliku manifestu pola screenshots i description. Zapoznaj się z tym przykładem dotyczącym aplikacji Squoosh.app:

Poszerzony UI instalacji na komputerach i urządzeniach mobilnych
Bogaty interfejs instalacji na komputerze i urządzeniu mobilnym.

Okno interfejsu instalacji rozszerzonego składa się z pól description i screenshots pliku manifestu internetowego.

Aby je otworzyć, musisz dodać co najmniej 1 zrzut ekranu na odpowiedni format. Zalecamy też dodanie opisu. Poniżej znajdziesz szczegółowe informacje o tych polach.

Zrzuty ekranu

Zrzuty ekranu znacznie wzbogacają nowy interfejs instalacji, dlatego zdecydowanie zalecamy korzystanie z nich. W pliku manifestu dodajesz użytkownika screenshots, który pobiera tablicę wymagającą co najmniej 1 obrazu, a Chrome wyświetla maksymalnie 8. Przykład poniżej.

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

Zrzuty ekranu muszą spełniać te kryteria:

  • Szerokość i wysokość muszą wynosić co najmniej 320 i 3840 pikseli.
  • Maksymalny wymiar nie może być większy niż 2,3 raza dłuższy niż wymiar minimalny.
  • Wszystkie zrzuty ekranu o tym samym formacie muszą mieć identyczne formaty obrazu.
  • Obsługiwane są tylko formaty obrazów JPEG i PNG.
  • Wyświetlonych zostanie tylko 8 zrzutów ekranu. Jeśli dodasz ich więcej, klient użytkownika je zignoruje.

Aby prawidłowo wyświetlać obraz, musisz podać też jego rozmiar i typ. Zobacz prezentację

Tag form_factor informuje przeglądarkę, czy zrzut ekranu powinien być wyświetlany na komputerze (wide) czy na urządzeniu mobilnym (narrow).

Opis

Użytkownik description opisuje aplikację w prośbie o zainstalowanie, aby zaprosić użytkownika do jej zachowania.

Okno będzie wyświetlane nawet bez elementu description, ale jest to zalecane. Obowiązuje limit czasu, który zaczyna się po 7 wierszach tekstu (około 324 znaki), a dłuższe teksty są obcinane i dołączany wielokropek (jak widać w tym przykładzie).

{
…
"description": "Compress and compare images with different codecs
right in your browser."
}
Dodano opis
Dodano tekst.
Dłuższy opis, który został skrócony.
Dłuższe opisy są obcinane.

Opis jest widoczny u góry prośby o instalację.

Na zrzutach ekranu być może zauważysz, że w oknach dialogowych instalacji znajduje się również pochodzenie aplikacji. Źródła, które są zbyt długie, aby zmieścić się w interfejsie, są skracane. Nazywamy to usuwaniem i służą jako środki bezpieczeństwa chroniące użytkowników.

Więcej informacji

Pokaz

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