如何新增更豐富的安裝使用者介面

應用程式商店可讓開發人員在安裝前展示應用程式,提供螢幕截圖和文字資訊,方便使用者選擇安裝應用程式。豐富的安裝 UI 為網頁應用程式開發人員提供類似空間,可讓使用者直接透過瀏覽器邀請使用者安裝應用程式。這項強化版 UI 適用於 Android 和電腦版 Google Chrome。

請參閱下例,瞭解預設體驗,使用的背景資訊不足。

電腦上的瀏覽器預設安裝對話方塊。
電腦上的預設安裝對話方塊


行動裝置的瀏覽器預設安裝對話方塊。
行動裝置上的預設安裝對話方塊

更豐富的安裝使用者介面

如要取得資訊豐富的安裝 UI 對話方塊,而非一般小型的預設提示,請在網路資訊清單中新增 screenshotsdescription 欄位。請參考以下 Squoosh.app 的範例:

電腦和行動裝置上更豐富的安裝使用者介面
在電腦和行動裝置上提供更豐富的安裝使用者介面。

更豐富的安裝 UI 對話方塊是由網路資訊清單中 descriptionscreenshots 欄位的內容組成。

如要觸發對話方塊,您只需為對應的板型規格新增至少一張螢幕截圖,建議一併加入說明。請查看下方各欄位的詳細資訊。

螢幕截圖

螢幕擷取畫面可讓您增添「內容更豐富」的字樣部分,我們也強烈建議您使用。您在資訊清單中新增 screenshots 成員,該成員需要的陣列至少要有一張圖片,而 Chrome 最多會顯示八個圖片。範例如下所示。

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

螢幕截圖必須符合下列條件:

  • 寬度和高度必須介於 320 像素到 3,840 像素之間。
  • 尺寸上限不得超過最小尺寸的 2.3 倍。
  • 凡是相同板型規格值的螢幕截圖,都必須採用相同的顯示比例
  • 僅支援 JPEG 和 PNG 圖片格式。
  • 只會顯示八張螢幕截圖。如果系統新增多個項目,使用者代理程式會直接予以忽略。

此外,您還必須提供圖片大小和類型,才能正確顯示。請參閱此示範

form_factor 會指示瀏覽器應在電腦 (wide) 或行動裝置環境 (narrow) 顯示螢幕截圖。

說明

description 成員會在安裝提示中描述應用程式,邀請使用者繼續使用應用程式。

即使沒有 description,對話方塊仍會顯示,但還是建議您這麼做。 最多只能在 7 行文字 (約 324 個字元) 後標示開頭,較長的說明會截斷並附加刪節號 (如這個範例所示)。

{

"description": "Compress and compare images with different codecs
right in your browser
."
}
已新增說明
已新增說明。
,瞭解如何調查及移除這項存取權。
較長的說明遭到截斷。
較長的說明會遭到截斷。

說明會顯示在安裝提示的頂端。

您可能已經注意到,安裝對話方塊也會列出應用程式的來源。因為超過 UI 長度而太長的來源,會遭到截斷。這也稱為省略, 做為保護使用者的安全措施

延伸閱讀

示範

<!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>

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