Jak dodać bardziej rozbudowany interfejs instalacji

Sklepy z aplikacjami zapewniają deweloperom miejsce, w którym mogą zaprezentować swoje aplikacje przed instalacją, wraz ze zrzutami ekranu i informacjami tekstowymi, które ułatwiają podjęcie decyzji o zainstalowaniu aplikacji. Bogatszy interfejs instalacji zapewnia deweloperom aplikacji internetowych podobne miejsce, w którym mogą zapraszać użytkowników do instalowania ich aplikacji bezpośrednio w przeglądarce. Ten rozszerzony interfejs jest dostępny w Chrome na Androida i na komputerach.

Domyślny prompt

Poniżej znajdziesz przykład domyślnego interfejsu, który nie zawiera wystarczającego kontekstu.

Okno instalacji domyślnej przeglądarki na komputerze.
Domyślne okno instalacji na komputerze


Okno domyślnej instalacji przeglądarki na urządzeniach mobilnych.
Domyślne okno instalacji na urządzeniu mobilnym

Bogatszy interfejs instalacji

Aby wyświetlać bardziej szczegółowe okno interfejsu instalacji zamiast zwykłego, małego domyślnego promptu, dodaj do pliku manifestu internetowego pola screenshots i description. Oto przykład Squoosh.app:

Poszerzony UI instalacji na komputerach i urządzeniach mobilnych
Poszerzony interfejs użytkownika instalacji na komputerach i urządzeniach mobilnych.

Okno instalatora bogatszego interfejsu użytkownika składa się z zawartości pól description i screenshots w pliku manifestu internetowego.

Aby wyświetlić to okno, musisz dodać co najmniej 1 zrzut ekranu dla odpowiedniego formatu, ale zalecamy też dodanie opisu. Sprawdź szczegóły dotyczące poszczególnych pól poniżej.

Zrzuty ekranu

Zrzuty ekranu dodają do nowego interfejsu instalacji. Zdecydowanie zalecamy ich użycie. W pliku manifestu dodajesz element screenshots, który pobiera tablicę, która wymaga co najmniej 1 obrazu, a Chrome wyświetla ich maksymalnie 8. Przykład poniżej.

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

Zrzuty ekranu muszą spełniać te kryteria:

  • Szerokość i wysokość musi wynosić co najmniej 320–3840 pikseli.
  • Maksymalny wymiar nie może być dłuższy niż 2,3 raza dłuższy niż wymiar minimalny.
  • Wszystkie zrzuty ekranu z wartością jednego formatu muszą mieć identyczne formaty obrazu.
  • Obsługiwane są tylko formaty graficzne JPEG i PNG.
  • Wyświetli się tylko 8 zrzutów ekranu. Jeśli zostanie dodanych więcej, klient użytkownika po prostu je zignoruje.

Pamiętaj też o podaniu rozmiaru i typu obrazu, aby wyświetlał się prawidłowo. Zobacz tę demonstrację

form_factor wskazuje przeglądarce, czy zrzut ekranu powinien pojawić się na komputerze (wide) czy na urządzeniu mobilnym (narrow).

Opis

Użytkownik description opisuje aplikację w komunikacie instalacji, aby zaprosić użytkownika do jej zachowania.

Okno wyświetla się nawet bez description, ale jest to zalecane. Obowiązuje limit 7 wierszy tekstu (około 324 znaki). Dłuższe opisy są obcinane i dołączane wielokropek (jak widać w tym przykładzie).

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

Opis pojawi się u góry komunikatu z prośbą o instalację.

Na zrzutach ekranu możesz już zauważyć, że w oknach instalacji jest też wyświetlana informacja o pochodzeniu aplikacji. Źródła, które są zbyt długie, aby zmieścić się w interfejsie, są obcinane. Nazywa się to eliminacją i jest używane w ramach zabezpieczeń chroniących użytkowników.

Więcej informacji

Prezentacja

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