बेहतर तरीके से इंस्टॉल करने का यूज़र इंटरफ़ेस (यूआई) जोड़ने का तरीका

ऐप्लिकेशन स्टोर, डेवलपर को ऐप्लिकेशन इंस्टॉल करने से पहले स्क्रीनशॉट और टेक्स्ट की जानकारी के साथ एक जगह देता है, ताकि उपयोगकर्ता ऐप्लिकेशन इंस्टॉल करने का विकल्प चुन सकें. बेहतर तरीके से इंस्टॉल करने के यूज़र इंटरफ़ेस (यूआई) की मदद से, वेब ऐप्लिकेशन डेवलपर ऐसी ही जगह अपने उपयोगकर्ताओं को सीधे ब्राउज़र से अपने ऐप्लिकेशन इंस्टॉल करने का न्योता दे सकते हैं. यह बेहतर यूज़र इंटरफ़ेस (यूआई), Android के लिए Chrome और डेस्कटॉप के लिए उपलब्ध है.

डिफ़ॉल्ट प्रॉम्प्ट

डिफ़ॉल्ट अनुभव के लिए नीचे दिया गया उदाहरण देखें, जिसमें ज़रूरी जानकारी नहीं दी गई है.

डेस्कटॉप के लिए, ब्राउज़र का डिफ़ॉल्ट इंस्टॉल डायलॉग.
डेस्कटॉप पर, इंस्टॉल करने का डिफ़ॉल्ट डायलॉग


मोबाइल के लिए, ब्राउज़र का डिफ़ॉल्ट इंस्टॉल डायलॉग.
मोबाइल पर इंस्टॉल करने का डिफ़ॉल्ट डायलॉग

बेहतर तरीके से इंस्टॉल करने का यूज़र इंटरफ़ेस (यूआई)

सामान्य छोटे डिफ़ॉल्ट प्रॉम्प्ट के बजाय, बेहतर तरीके से इंस्टॉल करने वाला यूज़र इंटरफ़ेस (यूआई) डायलॉग पाने के लिए, अपने वेब मेनिफ़ेस्ट में screenshots और description फ़ील्ड जोड़ें. नीचे Squoosh.app का उदाहरण देखें:

डेस्कटॉप और मोबाइल पर, इंस्टॉल करने के लिए बेहतर यूज़र इंटरफ़ेस (यूआई)
डेस्कटॉप और मोबाइल पर, बेहतर तरीके से इंस्टॉल करने के लिए यूज़र इंटरफ़ेस (यूआई).

रिचर इंस्टॉल यूज़र इंटरफ़ेस (यूआई) डायलॉग, वेब मेनिफ़ेस्ट में description और screenshots फ़ील्ड के कॉन्टेंट से मिलकर बना होता है.

डायलॉग को ट्रिगर करने के लिए, आपको डिवाइस के नाप या आकार के लिए, कम से कम एक स्क्रीनशॉट जोड़ना होगा. हालांकि, हमारा सुझाव है कि आप जानकारी भी जोड़ें. नीचे उन फ़ील्ड की खास बातों को देखें.

स्क्रीनशॉट

स्क्रीनशॉट, नए इंस्टॉल यूज़र इंटरफ़ेस (यूआई) में 'बेहतर' हिस्सा जोड़ते हैं. हमारा सुझाव है कि आप इनका इस्तेमाल करें. अपने मेनिफ़ेस्ट में, आपने screenshots मेंबर को जोड़ा है. यह सदस्य ऐसा कलेक्शन लेता है जिसके लिए कम से कम एक इमेज की ज़रूरत होती है और Chrome ज़्यादा से ज़्यादा आठ इमेज दिखाएगा. इसका एक उदाहरण यहां दिया गया है.

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

स्क्रीनशॉट इन शर्तों के मुताबिक होने चाहिए:

  • चौड़ाई और ऊंचाई कम से कम 320 पिक्सल और ज़्यादा से ज़्यादा 3,840 पिक्सल होनी चाहिए.
  • ज़्यादा से ज़्यादा डाइमेंशन की वैल्यू, सबसे कम डाइमेंशन से 2.3 गुना ज़्यादा नहीं हो सकती.
  • एक ही नाप या आकार वाले सभी स्क्रीनशॉट का आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) एक जैसा होना चाहिए.
  • सिर्फ़ JPEG और PNG इमेज फ़ॉर्मैट काम करते हैं.
  • सिर्फ़ आठ स्क्रीनशॉट दिखाए जाएंगे. अगर और उपयोगकर्ता एजेंट जोड़े जाते हैं, तो उपयोगकर्ता एजेंट उन्हें अनदेखा कर देता है.

साथ ही, आपको इमेज का साइज़ और टाइप भी शामिल करना होगा, ताकि वह सही तरीके से रेंडर हो सके. यह डेमो देखें.

form_factor से ब्राउज़र को पता चलता है कि स्क्रीनशॉट को डेस्कटॉप (wide) पर दिखाना चाहिए या मोबाइल प्लैटफ़ॉर्म (narrow) पर.

ब्यौरा

description के सदस्य, इंस्टॉलेशन के अनुरोध में ऐप्लिकेशन के बारे में जानकारी देते हैं, ताकि उपयोगकर्ता को ऐप्लिकेशन इंस्टॉल करने का न्योता भेजा जा सके.

यह डायलॉग description के बिना भी दिखेगा, लेकिन इसे इस्तेमाल करने के लिए बढ़ावा दिया जाता है. यहां ज़्यादा से ज़्यादा वैल्यू, टेक्स्ट की सात लाइनों (करीब 324 वर्ण) के बाद शुरू होती हैं. साथ ही, लंबे ब्यौरे छोटी कर दी जाती हैं और एक एलिप्सिस जोड़ दिया जाता है. जैसा कि इस उदाहरण में देखा जा सकता है.

{
…
"description": "Compress and compare images with different codecs
right in your browser."
}
ब्यौरा जोड़ा गया
ब्यौरा जोड़ा गया.
ज़्यादा लंबा ब्यौरा, जिसमें काट-छांट की गई हो.
लंबे ब्यौरे कम कर दिए जाते हैं.

यह जानकारी, इंस्टॉलेशन प्रॉम्प्ट में सबसे ऊपर दिखती है.

आपने स्क्रीनशॉट से देखा होगा कि इंस्टॉलेशन डायलॉग में ऐप्लिकेशन के ऑरिजिन की जानकारी भी शामिल होती है. जिन ऑरिजिन की लंबाई यूज़र इंटरफ़ेस (यूआई) में फ़िट करने के लिए बहुत लंबी है उन्हें छोटा कर दिया जाता है. इसे एलिडिंग भी कहा जाता है. इसका इस्तेमाल उपयोगकर्ताओं को सुरक्षित रखने के लिए किए जाने वाले सुरक्षा उपाय के तौर पर किया जाता है.

इसके बारे में और पढ़ें

डेमो

एचटीएमएल

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