App Store มีพื้นที่ให้นักพัฒนาแอปได้อวดแอปของตนก่อนการติดตั้ง โดยมีภาพหน้าจอและข้อมูลในรูปแบบข้อความที่ช่วยผู้ใช้ตัดสินใจเลือกติดตั้งแอป UI การติดตั้งที่สมบูรณ์ขึ้นจะให้พื้นที่คล้ายคลึงกันสำหรับนักพัฒนาแอปเว็บในการเชิญผู้ใช้ให้ติดตั้งแอปของตนจากเบราว์เซอร์โดยตรง UI ที่ได้รับการปรับปรุงนี้พร้อมใช้งานใน Chrome สำหรับสภาพแวดล้อม Android และเดสก์ท็อป
ข้อความแจ้งเริ่มต้น
ดูตัวอย่างประสบการณ์การใช้งานเริ่มต้นด้านล่างซึ่งมีบริบทไม่เพียงพอ
UI การติดตั้งที่สมบูรณ์ยิ่งขึ้น
หากต้องการรับกล่องโต้ตอบ UI การติดตั้งที่สมบูรณ์ขึ้นแทนข้อความแจ้งเริ่มต้นขนาดเล็กตามปกติ ให้เพิ่มช่อง screenshots
และ description
ลงในไฟล์ Manifest ของเว็บ ดูตัวอย่าง Squoosh.app ด้านล่างนี้
กล่องโต้ตอบ UI การติดตั้งที่สมบูรณ์ขึ้นประกอบด้วยเนื้อหาของช่อง description
และ screenshots
ในไฟล์ Manifest ของเว็บ
หากต้องการทริกเกอร์กล่องโต้ตอบ คุณเพียงต้องเพิ่มภาพหน้าจออย่างน้อย 1 ภาพสําหรับรูปแบบของอุปกรณ์ที่เกี่ยวข้อง แต่แนะนําให้เพิ่มคําอธิบายด้วย โปรดดูรายละเอียดของช่องต่างๆ ด้านล่าง
ภาพหน้าจอ
ภาพหน้าจอช่วยเพิ่ม "ความสมบูรณ์" ได้จริงๆ ไปยัง UI การติดตั้งใหม่ และเราขอแนะนำอย่างยิ่งให้ใช้ คุณเพิ่มสมาชิก screenshots
ในไฟล์ Manifest ได้ ซึ่งจะใช้อาร์เรย์ที่ต้องใช้อย่างน้อย 1 รูปภาพ และ Chrome จะแสดงได้สูงสุด 8 รายการ ดูตัวอย่างด้านล่างนี้
"screenshots": [
{
"src": "source/image1.png",
"sizes": "640x320",
"type": "image/png",
"form_factor": "wide",
"label": "Wonder Widgets"
}
]
ภาพหน้าจอต้องเป็นไปตามเกณฑ์ต่อไปนี้
- ความกว้างและความสูงต้องมีอย่างน้อย 320 พิกเซลและไม่เกิน 3,840 พิกเซล
- มิติข้อมูลสูงสุดจะยาวกว่ามิติข้อมูลต่ำสุดได้ไม่เกิน 2.3 เท่า
- ภาพหน้าจอทั้งหมดที่มีค่ารูปแบบของอุปกรณ์เดียวกันต้องมีสัดส่วนภาพเท่ากัน
- รองรับเฉพาะรูปแบบรูปภาพ JPEG และ PNG เท่านั้น
- ระบบจะแสดงภาพหน้าจอเพียง 8 ภาพเท่านั้น หากมีการเพิ่มค่ามากกว่านั้น User Agent จะไม่ดำเนินการใดๆ
นอกจากนี้ คุณยังต้องระบุขนาดและประเภทของรูปภาพเพื่อให้แสดงผลได้อย่างถูกต้อง ดูการสาธิตนี้
form_factor
จะเป็นตัวระบุต่อเบราว์เซอร์ว่าภาพหน้าจอควรปรากฏบนเดสก์ท็อป (wide
) หรือสภาพแวดล้อมของอุปกรณ์เคลื่อนที่ (narrow
)
คำอธิบาย
สมาชิก description
อธิบายแอปพลิเคชันในข้อความแจ้งให้ติดตั้งเพื่อเชิญผู้ใช้ให้เก็บแอปไว้
กล่องโต้ตอบจะปรากฏขึ้นแม้จะไม่มี description
แต่ขอแนะนำให้ใช้
ข้อความจะแสดงต่อได้สูงสุด 7 บรรทัด (ประมาณ 324 อักขระ) และคำอธิบายที่ยาวขึ้นจะถูกตัดและมีจุดไข่ปลาต่อท้าย (ดังที่แสดงในตัวอย่างนี้)
{
…
"description": "Compress and compare images with different codecs
right in your browser."
}
คำอธิบายจะปรากฏที่ด้านบนของข้อความแจ้งให้ติดตั้ง
คุณอาจสังเกตเห็นจากภาพหน้าจอว่ากล่องโต้ตอบการติดตั้งยังแสดงต้นทางของแอปด้วย ต้นทางที่ยาวเกินไปและพอดีกับ UI จะถูกตัดออก หรือที่เรียกว่า Eliding และมีการใช้ เป็นมาตรการรักษาความปลอดภัยเพื่อปกป้องผู้ใช้
อ่านเพิ่มเติม
สาธิต
<!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();
});
}