Jak dodać bardziej rozbudowany interfejs instalacji

Sklepy z aplikacjami umożliwiają deweloperom prezentowanie aplikacji przed instalacją za pomocą zrzutów ekranu i informacji tekstowych, które pomagają użytkownikowi podjąć decyzję o zainstalowaniu aplikacji. Rozszerzony interfejs instalacji zapewnia deweloperom aplikacji internetowych podobną przestrzeń, w której mogą zachęcać użytkowników do instalowania 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ślnego działania, które 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

Rozszerzony interfejs instalacji

Aby zamiast zwykłego małego domyślnego prompta wyświetlać okno rozszerzonego interfejsu instalacji, dodaj do manifestu aplikacji internetowej pola screenshots i description. Poniżej znajdziesz przykład Squoosh.app:

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

Okno rozszerzonego interfejsu instalacji składa się z zawartości pól description i screenshots w manifeście aplikacji internetowej.

Aby wywołać okno, wystarczy dodać co najmniej 1 zrzut ekranu dla odpowiedniego współczynnika proporcji, ale zalecamy też dodanie opisu. Poniżej znajdziesz szczegółowe informacje o tych polach.

Zrzuty ekranu

Zrzuty ekranu naprawdę wzbogacają nowy interfejs instalacji i zdecydowanie zalecamy ich używanie. W manifeście dodajesz element screenshots, który przyjmuje tablicę wymagającą co najmniej 1 obrazu, a Chrome wyświetli maksymalnie 8 obrazów. Poniżej znajdziesz przykład.

 "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ść muszą wynosić co najmniej 320 pikseli i co najwyżej 3840 pikseli.
  • Maksymalny wymiar nie może być więcej niż 2,3 razy dłuższy od minimalnego wymiaru.
  • Wszystkie zrzuty ekranu z tą samą wartością współczynnika proporcji muszą mieć identyczne współczynniki proporcji.
  • Obsługiwane są tylko formaty obrazów JPEG i PNG.
  • Wyświetlane będą tylko 8 zrzuty ekranu. Jeśli dodasz więcej, agent użytkownika po prostu je zignoruje.

Musisz też podać rozmiar i typ obrazu, aby był on prawidłowo renderowany.

Wartość form_factor informuje przeglądarkę, czy zrzut ekranu ma się wyświetlać na komputerze (wide) czy na urządzeniu mobilnym (narrow).

Opis

Element description opisuje aplikację w prompcie instalacji, aby zachęcić użytkownika do jej zachowania.

Okno będzie się wyświetlać nawet bez elementu description, ale zalecamy jego dodanie. Maksymalna długość to 7 wierszy tekstu (ok. 324 znaków). Dłuższe opisy są obcinane i dodawany jest wielokropek.

{

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

Opis pojawia się u góry prompta instalacji.

Na zrzutach ekranu możesz zauważyć, że okna instalacji zawierają też źródło aplikacji. Źródła, które są zbyt długie, aby zmieścić się w interfejsie, są obcinane. Jest to też znane jako elipsa i służy jako środek bezpieczeństwa chroniący 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();
  });
}