Android ऐप्लिकेशन के लिंक की पुष्टि करें

Android ऐप्लिकेशन लिंक एक खास तरह का डीप लिंक है. इसकी मदद से, आपकी वेबसाइट के यूआरएल, आपके Android ऐप्लिकेशन में उससे जुड़ा कॉन्टेंट तुरंत खोल सकते हैं. इसके लिए, उपयोगकर्ता को ऐप्लिकेशन चुनने की ज़रूरत नहीं होती. Android ऐप्लिकेशन लिंक, Digital Asset Links API का इस्तेमाल करके यह भरोसा दिलाते हैं कि आपके ऐप्लिकेशन को वेबसाइट ने मंज़ूरी दी है, ताकि वह उस डोमेन के लिंक अपने-आप खोल सके. अगर सिस्टम यह पुष्टि कर लेता है कि यूआरएल का मालिकाना हक आपके पास है, तो सिस्टम, उन यूआरएल इंटेंट को अपने-आप आपके ऐप्लिकेशन पर रूट कर देता है.

यह पुष्टि करने के लिए कि आप अपने ऐप्लिकेशन और वेबसाइट यूआरएल, दोनों के मालिक हैं, इसके लिए, नीचे दिया गया तरीका अपनाएं:

  1. ऐसे इंटेंट फ़िल्टर जोड़ें जिनमें autoVerify एट्रिब्यूट शामिल हो. यह एट्रिब्यूट, सिस्टम को यह सिग्नल देता है कि उसे पुष्टि करनी चाहिए कि आपका ऐप्लिकेशन, आपके इंटेंट फ़िल्टर में इस्तेमाल किए गए यूआरएल डोमेन से जुड़ा है या नहीं.

  2. अपनी वेबसाइट और अपने इंटेंट के बीच असोसिएशन का एलान करें डिजिटल ऐसेट लिंक JSON फ़ाइल को यहां होस्ट करके फ़िल्टर किया जा सकता है:

    https://domain.name/.well-known/assetlinks.json

इससे जुड़ी जानकारी नीचे दिए गए संसाधनों में मिल सकती है:

ऐप्लिकेशन लिंक की पुष्टि के लिए इंटेंट फ़िल्टर जोड़ना

अपने ऐप्लिकेशन के लिए लिंक मैनेज करने की पुष्टि करने की सुविधा चालू करने के लिए, मेल खाने वाले इंटेंट फ़िल्टर जोड़ें निम्न प्रारूप:

<!-- Make sure you explicitly set android:autoVerify to "true". -->
<intent-filter android:autoVerify="true">
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />

    <!-- If a user clicks on a shared link that uses the "http" scheme, your
         app should be able to delegate that traffic to "https". -->
    <data android:scheme="http" />
    <data android:scheme="https" />

    <!-- Include one or more domains that should be verified. -->
    <data android:host="..." />
</intent-filter>

हालांकि, autoVerify को केवल एक <intent-filter> में शामिल करना ही काफ़ी है हर होस्ट के लिए एलान, भले ही उस होस्ट का इस्तेमाल बिना निशान वाले दूसरे होस्ट के लिए किया गया हो तो हमारा सुझाव है कि आप हर एलान में autoVerify जोड़ें स्थिरता के लिए <intent-filter> एलिमेंट. इससे यह भी पक्का होता है कि अपनी मेनिफ़ेस्ट फ़ाइल से एलिमेंट हटाने या उन्हें रीफ़ैक्टर करने के बाद भी, आपका ऐप्लिकेशन जुड़ा रहेगा उन सभी डोमेन के साथ जिन्हें आपने अब भी तय किया है.

डोमेन की पुष्टि करने की प्रक्रिया के लिए इंटरनेट कनेक्शन की ज़रूरत होती है और यह प्रोसेस पूरी हो सकती है पूरा होने में कुछ समय लगता है. प्रक्रिया की परफ़ॉर्मेंस को बेहतर बनाने के लिए, सिस्टम Android 12 या उसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के डोमेन की पुष्टि करता है सिर्फ़ तब, जब वह डोमेन किसी ऐसे <intent-filter> एलिमेंट के अंदर हो जिसमें यह फ़ॉर्मैट पिछले कोड स्निपेट में दिया गया है.

एक से ज़्यादा होस्ट के लिए ऐप्लिकेशन लिंक करने की सुविधा

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

ध्यान दें: Android 11 (एपीआई लेवल 30) और इससे पहले के वर्शन वाले डिवाइसों पर, सिस्टम यह तब तक आपके ऐप्लिकेशन की डिफ़ॉल्ट हैंडलर के तौर पर पुष्टि नहीं करता, जब तक कि इसे डिजिटल ऐसेट लिंक, उन सभी होस्ट के लिए फ़ाइल होते हैं जिन्हें आपने मेनिफ़ेस्ट.

उदाहरण के लिए, इस इंटेंट वाला कोई ऐप्लिकेशन फ़िल्टर केवल https://www.example.com के लिए सत्यापन पास करेंगे अगर assetlinks.json फ़ाइल https://www.example.com/.well-known/assetlinks.json है, लेकिन नहीं https://www.example.net/.well-known/assetlinks.json:

<application>

  <activity android:name=”MainActivity”>
    <intent-filter android:autoVerify="true">
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="http" />
      <data android:scheme="https" />
      <data android:host="www.example.com" />
    </intent-filter>
  </activity>
  <activity android:name=”SecondActivity”>
    <intent-filter>
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="https" />
     <data android:host="www.example.net" />
    </intent-filter>
  </activity>

</application>

ध्यान दें: एक ही इंटेंट फ़िल्टर में सभी <data> एलिमेंट अलग-अलग एट्रिब्यूट के सभी वैरिएंट को ध्यान में रखते हुए, इन्हें एक साथ मर्ज किया गया हो. उदाहरण के लिए, ऊपर दिए गए पहले इंटेंट फ़िल्टर में एक <data> एलिमेंट शामिल है, जो सिर्फ़ एचटीटीपीएस स्कीम के बारे में बताता है. हालांकि, इसे दूसरे <data> एलिमेंट के साथ जोड़ा जाता है, ताकि इंटेंट फ़िल्टर, http://www.example.com और https://www.example.com, दोनों के साथ काम कर सके. इसलिए, जब आप खास कॉम्बिनेशन तय करना चाहते हैं, तो आपको अलग-अलग इंटेंट फ़िल्टर बनाने होंगे और डोमेन के यूआरआई स्कीम और डोमेन का इस्तेमाल करती हैं.

कई सबडोमेन के लिए ऐप्लिकेशन लिंक करना

डिजिटल ऐसेट लिंक प्रोटोकॉल, आपके इंटेंट फ़िल्टर में मौजूद सबडोमेन को यूनीक मानता है, अलग-अलग होस्ट. इसलिए, अगर आपको फ़िल्टर में अलग-अलग सबडोमेन वाले कई होस्ट शामिल हैं, तो आपको हर डोमेन पर assetlinks.json. उदाहरण के लिए, इस इंटेंट फ़िल्टर में www.example.com और mobile.example.com को इंटेंट यूआरएल के होस्ट के तौर पर स्वीकार किया जाता है. इसलिए, assetlinks.json दोनों पर प्रकाशित होना चाहिए https://www.example.com/.well-known/assetlinks.json और https://mobile.example.com/.well-known/assetlinks.json.

<application>
  <activity android:name=”MainActivity”>
    <intent-filter android:autoVerify="true">
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="https" />
      <data android:scheme="https" />
      <data android:host="www.example.com" />
      <data android:host="mobile.example.com" />
    </intent-filter>
  </activity>
</application>

इसके अलावा, अगर आपने वाइल्डकार्ड (जैसे कि *.example.com) से अपने होस्टनेम का एलान किया है, आपको रूट होस्टनेम पर अपनी assetlinks.json फ़ाइल पब्लिश करनी होगी (example.com). उदाहरण के लिए, नीचे दिया गया इंटेंट फ़िल्टर वाला ऐप्लिकेशन, example.com के किसी भी उप-नाम (जैसे कि foo.example.com) के लिए पुष्टि जब तक कि assetlinks.json फ़ाइल यहां https://example.com/.well-known/assetlinks.json:

<application>
  <activity android:name=”MainActivity”>
    <intent-filter android:autoVerify="true">
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="https" />
      <data android:host="*.example.com" />
    </intent-filter>
  </activity>
</application>

एक ही डोमेन से जुड़े कई ऐप्लिकेशन की जांच करें

अगर एक ही डोमेन से जुड़े कई ऐप्लिकेशन पब्लिश किए जाते हैं, तो वे हर एक की पुष्टि की जा सकती है. हालांकि, अगर ऐप्लिकेशन समस्या को ठीक कर सकते हैं, डोमेन होस्ट और पथ एक ही होंगे, जैसा कि इसके लाइट और पूर्ण वर्शन के मामले में हो सकता है ऐप्लिकेशन, सिर्फ़ हाल ही में इंस्टॉल किया गया ऐप्लिकेशन ही वेब इंटेंट का समाधान कर सकता है उस डोमेन के लिए.

ऐसे मामले में, उपयोगकर्ता के डिवाइस पर ऐसे ऐप्लिकेशन देखें जो आपके ऐप्लिकेशन के साथ काम न कर रहे हों. ऐसा तब ही करें, जब आपके पास पैकेज के दिखने से जुड़ी ज़रूरी जानकारी हो. इसके बाद, अपने ऐप्लिकेशन में पसंद के मुताबिक चुने जाने वाले डायलॉग बॉक्स दिखाएं. इसमें queryIntentActivities() को कॉल करने से मिले नतीजे शामिल होने चाहिए. उपयोगकर्ता, डायलॉग में दिखने वाले मिलते-जुलते ऐप्लिकेशन की सूची से अपना पसंदीदा ऐप्लिकेशन चुन सकता है.

वेबसाइट असोसिएशन के बारे में बताना

एक डिजिटल ऐसेट लिंक JSON फ़ाइल आपकी वेबसाइट पर पब्लिश होनी चाहिए, ताकि Android ऐप्लिकेशन के बारे में जानकारी मिल सके जो वेबसाइट से जुड़ी होती हैं और ऐप्लिकेशन के यूआरएल इंटेंट की पुष्टि करती हैं. JSON फ़ाइल, जुड़े हुए ऐप्लिकेशन की पहचान करने के लिए इन फ़ील्ड का इस्तेमाल करती है:

  • package_name: ऐप्लिकेशन आईडी ऐप्लिकेशन की build.gradle फ़ाइल में बताया गया.
  • sha256_cert_fingerprints: आपके ऐप्लिकेशन के साइनिंग सर्टिफ़िकेट के SHA256 फ़िंगरप्रिंट. Java कीटूल के ज़रिए फ़िंगरप्रिंट जनरेट करने के लिए, इस निर्देश का इस्तेमाल किया जा सकता है:
    keytool -list -v -keystore my-release-key.keystore
    
    इस फ़ील्ड में एक से ज़्यादा फ़िंगरप्रिंट काम करते हैं, जिनका इस्तेमाल आपके ऐप्लिकेशन के अलग-अलग वर्शन, जैसे कि डीबग और प्रोडक्शन बिल्ड.

    अगर अपने ऐप्लिकेशन के लिए Play ऐप्लिकेशन साइनिंग का इस्तेमाल किया जा रहा है, तो सर्टिफ़िकेट डिवाइस पर keytool को चलाकर बनाया गया फ़िंगरप्रिंट आम तौर पर, उपयोगकर्ताओं की डिवाइस. यह पुष्टि की जा सकती है कि इस्तेमाल किया जा रहा है या नहीं Play Console डेवलपर खाते में, आपके ऐप्लिकेशन के लिए 'Play ऐप्लिकेशन साइनिंग' सुविधा Release > Setup > App signing; अगर आप ऐसा करते हैं, तो आपको उसी पर अपने ऐप्लिकेशन के लिए सही डिजिटल ऐसेट लिंक JSON स्निपेट ढूंढें करें.

यहां दी गई उदाहरण assetlinks.json फ़ाइल, लिंक खोलने का ऐक्सेस com.example Android ऐप्लिकेशन को देती है:

[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.example",
    "sha256_cert_fingerprints":
    ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"]
  }
}]

एक से ज़्यादा ऐप्लिकेशन वाली वेबसाइट को जोड़ना

कोई वेबसाइट एक ही assetlinks.json में मौजूद कई ऐप्लिकेशन के असोसिएशन का एलान कर सकती है फ़ाइल से लिए जाते हैं. यहां दी गई फ़ाइल की लिस्टिंग में, स्टेटमेंट फ़ाइल का एक उदाहरण दिया गया है. यह फ़ाइल, असोसिएशन के बारे में बताती है जिसमें दो अलग-अलग ऐप्लिकेशन हों और https://www.example.com/.well-known/assetlinks.json:

[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.example.puppies.app",
    "sha256_cert_fingerprints":
    ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"]
  }
  },
  {
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.example.monkeys.app",
    "sha256_cert_fingerprints":
    ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"]
  }
}]

ऐसा हो सकता है कि अलग-अलग ऐप्लिकेशन, एक ही वेब होस्ट में अलग-अलग रिसॉर्स के लिए लिंक हैंडल करें. उदाहरण के लिए, app1, https://example.com/articles के लिए इंटेंट फ़िल्टर का एलान कर सकता है और app2 यह एलान कर सकता है https://example.com/videos के लिए इंटेंट फ़िल्टर.

ध्यान दें: किसी डोमेन से जुड़े कई ऐप्लिकेशन, एक ही डोमेन से साइन किए हुए हो सकते हैं या अलग-अलग सर्टिफ़िकेट.

एक ही ऐप्लिकेशन से कई वेबसाइटों को असोसिएट करना

कई वेबसाइटें, एक ही ऐप्लिकेशन के साथ असोसिएशन का एलान कर सकती हैं संबंधित assetlinks.json फ़ाइलें. यहां दी गई फ़ाइल लिस्टिंग में, उदाहरण के लिए, app1 के साथ example.com और example.net के असोसिएशन का एलान करने का तरीका बताया गया है. पहली लिस्टिंग में example.com का असोसिएशन दिखाया गया है app1 के साथ:

https://www.example.com/.well-known/assetlinks.json

[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.mycompany.app1",
    "sha256_cert_fingerprints":
    ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"]
  }
}]

अगली लिस्टिंग में, example.net को app1 से असोसिएट किया गया है. सिर्फ़ इन फ़ाइलों को होस्ट करने की जगह अलग है (.com और .net):

https://www.example.net/.well-known/assetlinks.json

[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.mycompany.app1",
    "sha256_cert_fingerprints":
    ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"]
  }
}]

JSON फ़ाइल की पुष्टि करने वाली फ़ाइल पब्लिश की जा रही है

आपको JSON फ़ॉर्मैट में पुष्टि करने के लिए इस्तेमाल होने वाली फ़ाइल को, यहां दी गई जगह पर पब्लिश करना होगा:

https://domain.name/.well-known/assetlinks.json

इन बातों का ध्यान रखें:

  • assetlinks.json फ़ाइल, कॉन्टेंट टाइप के साथ उपलब्ध कराई गई है application/json.
  • assetlinks.json फ़ाइल को एचटीटीपीएस कनेक्शन से ऐक्सेस किया जाना ज़रूरी है, भले ही, आपके ऐप्लिकेशन के इंटेंट फ़िल्टर, एचटीटीपीएस को डेटा स्कीम के तौर पर बताते हों.
  • यह ज़रूरी है कि assetlinks.json फ़ाइल को बिना किसी रीडायरेक्ट के ऐक्सेस किया जा सके (नहीं 301 या 302 रीडायरेक्ट के मामले में).
  • अगर आपके ऐप्लिकेशन लिंक एक से ज़्यादा होस्ट डोमेन के साथ काम करते हैं, तो आपको assetlinks.json फ़ाइल अपलोड करनी होगी. यहां जाएं: इसके लिए सहायक ऐप्लिकेशन लिंक करना एक से ज़्यादा होस्ट.
  • अपने ऐप्लिकेशन को मेनिफ़ेस्ट फ़ाइल में डेवलपर/टेस्ट यूआरएल के साथ प्रकाशित न करें जो हो सकता है कि जिसे सार्वजनिक तौर पर ऐक्सेस किया जा सके. उदाहरण के लिए, ऐसी फ़ाइलें जिन्हें सिर्फ़ वीपीएन से ऐक्सेस किया जा सकता है. ऐसे मामलों में, बिल्ड वैरिएंट कॉन्फ़िगर करें, ताकि डेवलपर बिल्ड के लिए एक अलग मेनिफ़ेस्ट फ़ाइल जनरेट की जा सके.

Android ऐप्लिकेशन के लिंक की पुष्टि

जब android:autoVerify="true" आपके ऐप्लिकेशन के कम से कम किसी एक इंटेंट में मौजूद हो फ़िल्टर करने के लिए, आपका ऐप्लिकेशन Android 6.0 (एपीआई लेवल 23) पर चलने वाले डिवाइस पर इंस्टॉल किया जा सकता है या ज़्यादा होने की वजह से सिस्टम, आपके ऐप्लिकेशन के इंटेंट फ़िल्टर में मौजूद यूआरएल. Android 12 और उसके बाद वाले वर्शन पर, साथ ही, पुष्टि की प्रक्रिया मैन्युअल तरीके से भी शुरू की जा सकती है. पुष्टि करने के लॉजिक की जांच करें.

अपने-आप पुष्टि होने की सुविधा

सिस्टम की अपने-आप पुष्टि होने में ये चीज़ें शामिल होती हैं:

  1. सिस्टम उन सभी इंटेंट फ़िल्टर की जांच करता है जिनमें इनमें से कुछ भी शामिल होता है:
    • काम: android.intent.action.VIEW
    • कैटगरी: android.intent.category.BROWSABLE और android.intent.category.DEFAULT
    • डेटा स्कीम: http या https
  2. ऊपर दिए गए इंटेंट फ़िल्टर में मिलने वाले हर यूनीक होस्ट नाम के लिए, Android क्वेरी डिजिटल ऐसेट लिंक की फ़ाइल से जुड़ी वेबसाइटों के बारे में यहां बताया गया है: https://hostname/.well-known/assetlinks.json.

अपने ऐप्लिकेशन से जोड़ने के लिए वेबसाइटों की सूची की पुष्टि करने और होस्ट की गई JSON फ़ाइल के मान्य होने की पुष्टि करने के बाद, अपने डिवाइस पर ऐप्लिकेशन इंस्टॉल करें. एसिंक्रोनस सत्यापन प्रक्रिया के लिए कम से कम 20 सेकंड इंतज़ार करें पूरा हुआ. इस कमांड का इस्तेमाल करके देखें कि सिस्टम ने आपके ऐप्लिकेशन की पुष्टि की है या नहीं और लिंक मैनेज करने की सही नीतियां सेट की हैं या नहीं:

adb shell am start -a android.intent.action.VIEW \
    -c android.intent.category.BROWSABLE \
    -d "http://domain.name:optional_port"

मैन्युअल तरीके से पुष्टि करना

Android 12 से, मैन्युअल तरीके से डोमेन शुरू किया जा सकता है डिवाइस पर इंस्टॉल किए गए ऐप्लिकेशन की पुष्टि करने के लिए किया जाता है. यह किया जा सकता है प्रोसेस करता है, भले ही आपका ऐप्लिकेशन Android 12 को टारगेट करता हो या नहीं.

इंटरनेट कनेक्शन बनाएं

डोमेन की पुष्टि करने के लिए, आपका टेस्ट डिवाइस इंटरनेट से कनेक्ट होना चाहिए.

डोमेन की पुष्टि करने की अपडेट की गई प्रक्रिया को पूरा करना

अगर आपका ऐप्लिकेशन, Android 12 या उसके बाद के वर्शन को टारगेट करता है, तो सिस्टम डोमेन सत्यापन प्रक्रिया को स्वचालित रूप से अपडेट कर दिया जाएगा.

इसके अलावा, अपडेट की गई पुष्टि की प्रक्रिया को मैन्युअल तरीके से चालू किया जा सकता है. ऐसा करने के लिए, टर्मिनल विंडो में नीचे दिया गया कमांड चलाएं:

adb shell am compat enable 175408749 PACKAGE_NAME

डिवाइस पर Android ऐप्लिकेशन के लिंक की स्थिति रीसेट करना

किसी डिवाइस पर डोमेन की पुष्टि मैन्युअल तरीके से शुरू करने से पहले, आपको टेस्ट डिवाइस पर Android ऐप्लिकेशन लिंक की स्थिति को रीसेट करना होगा. ऐसा करने के लिए, टर्मिनल विंडो में यह कमांड चलाएं:

adb shell pm set-app-links --package PACKAGE_NAME 0 all

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

डोमेन की पुष्टि की प्रक्रिया शुरू करना

किसी डिवाइस पर Android ऐप्लिकेशन के लिंक की स्थिति रीसेट करने के बाद, ये काम किए जा सकते हैं: खुद की पहचान की पुष्टि करता है. ऐसा करने के लिए, टर्मिनल विंडो में नीचे दिया गया कमांड चलाएं:

adb shell pm verify-app-links --re-verify PACKAGE_NAME

पुष्टि के नतीजों की समीक्षा करना

पुष्टि करने वाले एजेंट को अपने अनुरोध पूरे करने के लिए कुछ समय देने के बाद, पुष्टि के नतीजों की समीक्षा करें. ऐसा करने के लिए, नीचे दिया गया कमांड चलाएं:

adb shell pm get-app-links PACKAGE_NAME

इस निर्देश का आउटपुट इससे मिलता-जुलता है:

com.example.pkg:
    ID: 01234567-89ab-cdef-0123-456789abcdef
    Signatures: [***]
    Domain verification state:
      example.com: verified
      sub.example.com: legacy_failure
      example.net: verified
      example.org: 1026

पुष्टि की प्रक्रिया पूरी करने वाले डोमेन में, डोमेन की पुष्टि की स्थिति होती है verified पेज चुने जा सकते हैं. किसी और स्थिति से पता चलता है कि डोमेन की पुष्टि नहीं हो सकी कार्रवाई की जानी चाहिए. खास तौर पर, none स्टेटस का मतलब है कि पुष्टि ऐसा हो सकता है कि एजेंट ने अभी तक पुष्टि की प्रक्रिया पूरी न की हो.

नीचे दी गई सूची में, डोमेन की पुष्टि के लिए इस्तेमाल की जाने वाली वैल्यू दी गई हैं दिए गए डोमेन के लिए रिटर्न:

none
इस डोमेन के लिए कुछ भी रिकॉर्ड नहीं किया गया है. इस की पुष्टि करने वाले एजेंट को डोमेन की पुष्टि की प्रक्रिया को फिर से शुरू करें.
verified
जानकारी देने वाले ऐप्लिकेशन के लिए, डोमेन की पुष्टि हो गई है.
approved
डोमेन को हमेशा चालू रखने की अनुमति मिली थी. आम तौर पर, इसके लिए शेल कमांड इस्तेमाल किया जाता है.
denied
आम तौर पर, शेल कमांड इस्तेमाल करके डोमेन को ज़बरदस्ती अस्वीकार किया जाता है.
migrated
लेगसी डोमेन का इस्तेमाल करने वाली पिछली प्रोसेस की वजह से, सिस्टम को सुरक्षित रखा गया पुष्टि की प्रक्रिया.
restored
उपयोगकर्ता की ओर से डेटा वापस लाने के बाद, इस डोमेन को मंज़ूरी दी गई थी. यह माना जाता है इस बात की पुष्टि हो जाती है कि इस डोमेन की पुष्टि पहले हो चुकी है.
legacy_failure
डोमेन को पुष्टि करने वाले लेगसी प्रोग्राम ने अस्वीकार कर दिया है. रिफ़ंड न होने की वजह पता नहीं है.
system_configured
डिवाइस कॉन्फ़िगरेशन के ज़रिए डोमेन को अपने-आप मंज़ूरी मिल गई.
1024 या इसके बाद के वर्शन का गड़बड़ी कोड

डिवाइस के पुष्टि करने वाले कोड के हिसाब से पसंद के मुताबिक गड़बड़ी का कोड.

पक्का करें कि आपने नेटवर्क सेट किया हो कनेक्शन और डोमेन को शुरू करें पुष्टि की प्रक्रिया फिर से पूरी करें.

उपयोगकर्ता से आपके ऐप्लिकेशन को किसी डोमेन से जोड़ने का अनुरोध करें

आपके ऐप्लिकेशन को किसी डोमेन के लिए मंज़ूरी पाने का एक और तरीका है. इसके लिए, उपयोगकर्ता से अपने ऐप्लिकेशन को उस डोमेन से जोड़ने के लिए कहें.

यह देखना कि आपके ऐप्लिकेशन को डोमेन के लिए पहले से ही मंज़ूरी मिली है या नहीं

उपयोगकर्ता से अनुरोध करने से पहले, देख लें कि आपका ऐप्लिकेशन उन डोमेन के लिए डिफ़ॉल्ट हैंडलर है या नहीं जिन्हें आपने अपने <intent-filter> एलिमेंट में तय किया है. आप क्वेरी कर सकते हैं नीचे दिए गए तरीकों में से किसी एक का इस्तेमाल करके, समीक्षा की स्थिति देखें:

  • DomainVerificationManager एपीआई (रनटाइम पर).
  • कमांड-लाइन प्रोग्राम (जांच के दौरान).

डोमेन पुष्टि मैनेजर

नीचे दिया गया कोड स्निपेट DomainVerificationManager एपीआई:

Kotlin

val context: Context = TODO("Your activity or fragment's Context")
val manager = context.getSystemService(DomainVerificationManager::class.java)
val userState = manager.getDomainVerificationUserState(context.packageName)

// Domains that have passed Android App Links verification.
val verifiedDomains = userState?.hostToStateMap
    ?.filterValues { it == DomainVerificationUserState.DOMAIN_STATE_VERIFIED }

// Domains that haven't passed Android App Links verification but that the user
// has associated with an app.
val selectedDomains = userState?.hostToStateMap
    ?.filterValues { it == DomainVerificationUserState.DOMAIN_STATE_SELECTED }

// All other domains.
val unapprovedDomains = userState?.hostToStateMap
    ?.filterValues { it == DomainVerificationUserState.DOMAIN_STATE_NONE }

Java

Context context = TODO("Your activity or fragment's Context");
DomainVerificationManager manager =
        context.getSystemService(DomainVerificationManager.class);
DomainVerificationUserState userState =
        manager.getDomainVerificationUserState(context.getPackageName());

Map<String, Integer> hostToStateMap = userState.getHostToStateMap();
List<String> verifiedDomains = new ArrayList<>();
List<String> selectedDomains = new ArrayList<>();
List<String> unapprovedDomains = new ArrayList<>();
for (String key : hostToStateMap.keySet()) {
    Integer stateValue = hostToStateMap.get(key);
    if (stateValue == DomainVerificationUserState.DOMAIN_STATE_VERIFIED) {
        // Domain has passed Android App Links verification.
        verifiedDomains.add(key);
    } else if (stateValue == DomainVerificationUserState.DOMAIN_STATE_SELECTED) {
        // Domain hasn't passed Android App Links verification, but the user has
        // associated it with an app.
        selectedDomains.add(key);
    } else {
        // All other domains.
        unapprovedDomains.add(key);
    }
}

कमांड-लाइन प्रोग्राम

डेवलपमेंट के दौरान अपने ऐप्लिकेशन की जांच करते समय, नीचे दिए गए निर्देश का इस्तेमाल करके अपने संगठन के मालिकाना हक वाले डोमेन की पुष्टि की स्थिति के बारे में क्वेरी करें:

adb shell pm get-app-links --user cur PACKAGE_NAME

आउटपुट के नीचे दिए गए उदाहरण में, ऐप्लिकेशन "example.org" डोमेन पर, उपयोगकर्ता 0 ने सिस्टम सेटिंग में ऐप्लिकेशन को मैन्युअल तौर पर मंज़ूरी दी है, और उस डोमेन के लिए किसी दूसरे पैकेज की पुष्टि नहीं की गई है.

com.example.pkg:
ID: ***
Signatures: [***]
Domain verification state:
  example.com: verified
  example.net: verified
  example.org: 1026
User 0:
  Verification link handling allowed: true
  Selection state:
    Enabled:
      example.org
    Disabled:
      example.com
      example.net

उपयोगकर्ता जिस प्रोसेस को चुनता है उसे सिम्युलेट करने के लिए, शेल कमांड का इस्तेमाल भी किया जा सकता है दिए गए डोमेन से कौनसा ऐप्लिकेशन जुड़ा है. इनकी पूरी जानकारी कमांड, adb shell pm के आउटपुट से उपलब्ध हैं.

अनुरोध के लिए कॉन्टेक्स्ट दें

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

अनुरोध करें

जब उपयोगकर्ता को यह समझ आ जाए कि आपका ऐप्लिकेशन उनसे क्या करने के लिए कह रहा है, तब अनुरोध करें. ऐसा करने के लिए, एक ऐसे इंटेंट को शुरू करें जिसमें ACTION_APP_OPEN_BY_DEFAULT_SETTINGS इंटेंट कार्रवाई और डेटा स्ट्रिंग मैचिंग टारगेट ऐप्लिकेशन के लिए package:com.example.pkg, जैसा कि यहां दिया गया कोड स्निपेट जोड़ें:

Kotlin

val context: Context = TODO("Your activity or fragment's Context")
val intent = Intent(Settings.ACTION_APP_OPEN_BY_DEFAULT_SETTINGS,
    Uri.parse("package:${context.packageName}"))
context.startActivity(intent)

Java

Context context = TODO("Your activity or fragment's Context");
Intent intent = new Intent(Settings.ACTION_APP_OPEN_BY_DEFAULT_SETTINGS,
    Uri.parse("package:" + context.getPackageName()));
context.startActivity(intent);

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

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

रेडियो बटन के सक्षम होने पर, निचले हिस्से के पास स्थित एक अनुभाग
    इसमें &#39;लिंक जोड़ें&#39; और &#39;लिंक जोड़ें&#39; बटन भी होता है.
पहली इमेज. सिस्टम सेटिंग की वह स्क्रीन जहां उपयोगकर्ता चुन सकते हैं कौनसे लिंक आपके ऐप्लिकेशन में डिफ़ॉल्ट रूप से खुलते हैं.
हर चेकबॉक्स एक डोमेन दिखाता है, जिसे आप जोड़ सकते हैं. कॉन्टेंट बनाने
    डायलॉग बॉक्स के बटन &#39;रद्द करें&#39; हैं और &#39;जोड़ें&#39; पर क्लिक करें.
दूसरी इमेज. वह डायलॉग जहां उपयोगकर्ता अन्य डोमेन चुन सकते हैं को भी इंस्टॉल किया जा सकता है.

अपने ऐप्लिकेशन में वे डोमेन खोलें जिनकी पुष्टि आपका ऐप्लिकेशन नहीं कर सकता

ऐसा हो सकता है कि आपके ऐप्लिकेशन का मुख्य काम लिंक को तीसरे पक्ष के तौर पर खोलना हो. मैनेज किए जा रहे डोमेन की पुष्टि करने की सुविधा. अगर ऐसा है, तो उपयोगकर्ताओं को बताएं कि वे वेब लिंक चुनते समय, पहले पक्ष के ऐप्लिकेशन और आपके (तीसरे पक्ष) ऐप्लिकेशन में से किसी एक को नहीं चुन सकते. उपयोगकर्ताओं को डोमेन को आपके तीसरे पक्ष के ऐप्लिकेशन से मैन्युअल तरीके से जोड़ना होगा.

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

ऐप्लिकेशन के लिंक की जांच करें

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

किसी मौजूदा स्टेटमेंट फ़ाइल की जांच करने के लिए, स्टेटमेंट लिस्ट जनरेटर और टेस्टर टूल.

पुष्टि करने के लिए, होस्ट की सूची की पुष्टि करें

जांच करते समय, आपको उन होस्ट की सूची की पुष्टि करनी चाहिए जिनकी पुष्टि सिस्टम को आपके ऐप्लिकेशन के लिए करनी चाहिए. उन सभी यूआरएल की सूची बनाएं जिनके इंटेंट फ़िल्टर में ये एट्रिब्यूट और एलिमेंट शामिल हैं:

  • http या https वैल्यू वाली android:scheme एट्रिब्यूट
  • डोमेन के यूआरएल पैटर्न वाली android:host एट्रिब्यूट
  • android.intent.action.VIEW ऐक्शन एलिमेंट
  • android.intent.category.BROWSABLE कैटगरी एलिमेंट

इस सूची का इस्तेमाल करके देखें कि डिजिटल ऐसेट लिंक JSON फ़ाइल, नाम वाले हर होस्ट पर दी गई है या नहीं और सबडोमेन.

डिजिटल ऐसेट लिंक की फ़ाइलों की पुष्टि करें

हर वेबसाइट के लिए, Digital Asset Links API का इस्तेमाल करके पुष्टि करें कि डिजिटल ऐसेट लिंक JSON फ़ाइल को सही तरीके से होस्ट किया गया है और उसमें सही जानकारी दी गई है:

https://digitalassetlinks.googleapis.com/v1/statements:list?
   source.web.site=https://domain.name:optional_port&
   relation=delegate_permission/common.handle_all_urls

टेस्टिंग की प्रोसेस के तहत, लिंक मैनेज करने के लिए सिस्टम की मौजूदा सेटिंग देखी जा सकती हैं. सभी के लिए मौजूदा लिंक-हैंडलिंग नीतियों की सूची पाने के लिए, नीचे दिए गए निर्देश का इस्तेमाल करें आपके कनेक्ट किए गए डिवाइस पर मौजूद ऐप्लिकेशन:

adb shell dumpsys package domain-preferred-apps

इसके अलावा, यहां दिए गए नतीजे भी ऐसे ही होंगे:

adb shell dumpsys package d

ध्यान दें: पक्का करें कि ऐप्लिकेशन इंस्टॉल करने के बाद, कम से कम 20 सेकंड इंतज़ार करें, ताकि इससे सिस्टम को पुष्टि की प्रक्रिया पूरी करने की अनुमति मिलती है.

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

App linkages for user 0:

इस हेडर के बाद, आउटपुट में इस फ़ॉर्मैट का इस्तेमाल करके, उस उपयोगकर्ता के लिए लिंक मैनेज करने की सेटिंग की सूची बनाई जाती है:

Package: com.android.vending
Domains: play.google.com market.android.com
Status: always : 200000002

इस लिस्टिंग से पता चलता है कि उस उपयोगकर्ता के लिए कौनसे ऐप्लिकेशन किस डोमेन से जुड़े हैं:

  • Package - किसी ऐप्लिकेशन की पहचान उसके पैकेज के नाम से की जाती है, जैसा कि उसके मेनिफ़ेस्ट में बताया गया है.
  • Domains - उन होस्ट की पूरी सूची दिखाता है जिनके वेब लिंक यह ऐप्लिकेशन, इसका इस्तेमाल करके मैनेज करता है डेलिमिटर के तौर पर खाली जगह डालें.
  • Status - इस ऐप्लिकेशन के लिए, लिंक मैनेज करने की मौजूदा सेटिंग दिखाता है. जिस ऐप्लिकेशन की पुष्टि हो चुकी है और जिसके मेनिफ़ेस्ट में android:autoVerify="true" है उसकी स्थिति always दिखती है. इस स्थिति के बाद आने वाली हेक्साडेसिमल संख्या, Android सिस्टम की उपयोगकर्ता की ऐप्लिकेशन लिंक करने की प्राथमिकताओं का रिकॉर्ड. इस मान से यह नहीं पता चलता कि पुष्टि की प्रक्रिया सफल रहा.

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

टेस्ट का उदाहरण

ऐप्लिकेशन लिंक की पुष्टि सफल होने के लिए, सिस्टम को हर एक के साथ आपके ऐप्लिकेशन की पुष्टि करनी होगी वे वेबसाइटें जिन्हें आपने दिए गए इंटेंट फ़िल्टर में तय किया है, जो ऐप्लिकेशन की शर्तों को पूरा करता है लिंक. यहां दिए गए उदाहरण में, मेनिफ़ेस्ट कॉन्फ़िगरेशन दिखाया गया है. इसमें ऐप्लिकेशन के कई लिंक तय किए गए हैं:

<application>

    <activity android:name=”MainActivity”>
        <intent-filter android:autoVerify="true">
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="https" />
            <data android:scheme="https" />
            <data android:host="www.example.com" />
            <data android:host="mobile.example.com" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="https" />
            <data android:host="www.example2.com" />
        </intent-filter>
    </activity>

    <activity android:name=”SecondActivity”>
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="https" />
            <data android:host="account.example.com" />
        </intent-filter>
    </activity>

      <activity android:name=”ThirdActivity”>
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="https" />
            <data android:host="map.example.com" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="market" />
            <data android:host="example.com" />
        </intent-filter>
      </activity>

</application>

प्लैटफ़ॉर्म, ऊपर दिए गए मेनिफ़ेस्ट से उन होस्ट की सूची की पुष्टि करेगा जिनकी पुष्टि करने की कोशिश की जाएगी:

www.example.com
mobile.example.com
www.example2.com
account.example.com

ऊपर दिए गए मेनिफ़ेस्ट में मौजूद उन होस्ट की सूची जिनकी पुष्टि प्लैटफ़ॉर्म नहीं करेगा:

map.example.com (it does not have android.intent.category.BROWSABLE)
market://example.com (it does not have either an "http" or "https" scheme)

स्टेटमेंट की सूचियों के बारे में ज़्यादा जानने के लिए, देखें स्टेटमेंट की सूची बनाना.

लागू करने से जुड़ी सामान्य गड़बड़ियां ठीक करना

अगर आपको अपने Android ऐप्लिकेशन के लिंक की पुष्टि करने में समस्या आ रही है, तो इन सामान्य बातों की जांच करें गड़बड़ियां हैं. इस सेक्शन में, प्लेसहोल्डर डोमेन नेम के तौर पर example.com का इस्तेमाल किया जाता है; कब इन जांचों को पूरा करने के बाद, example.com को अपने सर्वर के असली यूआरएल से बदलें डोमेन नाम.

गलत इंटेंट फ़िल्टर सेट अप किया गया
यह देखें कि क्या आपने ऐसे यूआरएल को शामिल किया है जिसका मालिकाना हक आपके ऐप्लिकेशन के पास नहीं है <intent-filter> एलिमेंट.
सर्वर का गलत कॉन्फ़िगरेशन

अपने सर्वर के JSON कॉन्फ़िगरेशन की जांच करें और पक्का करें कि SHA वैल्यू सही है.

साथ ही, यह भी देख लें कि example.com. (पिछली अवधि के साथ) वही काम करता है या नहीं example.com की तरह कॉन्टेंट.

सर्वर साइड रीडायरेक्ट

अगर आपने ऐप्लिकेशन सेट अप किया है, तो सिस्टम आपके ऐप्लिकेशन के लिए किसी Android ऐप्लिकेशन के लिंक की पुष्टि नहीं करता रीडायरेक्ट इस तरह की है:

  • http://example.com से https://example.com
  • example.com से www.example.com

ऐसा करने से, आपके ऐप्लिकेशन का डेटा सुरक्षित रहता है.

सर्वर की क्षमता

देखें कि आपका सर्वर आपके क्लाइंट ऐप्लिकेशन से कनेक्ट हो पा रहा है या नहीं.

ऐसे लिंक जिनकी पुष्टि नहीं की जा सकती

जांच के लिए, जान-बूझकर ऐसे लिंक जोड़े जा सकते हैं जिनकी पुष्टि न की जा सके. ध्यान रखें कि Android 11 और उससे पहले के वर्शन पर, इन लिंक की वजह से सिस्टम आपके ऐप्लिकेशन के सभी Android ऐप्लिकेशन लिंक की पुष्टि नहीं करता.

assetlinks.json में गलत हस्ताक्षर है

पुष्टि करें कि आपका हस्ताक्षर सही है और हस्ताक्षर करने के लिए इस्तेमाल किए गए हस्ताक्षर से मेल खाता है आपका ऐप्लिकेशन. सामान्य गलतियों में ये शामिल हैं:

  • ऐप्लिकेशन को डीबग सर्टिफ़िकेट से साइन करना और assetlinks.json में सिर्फ़ रिलीज़ साइन होना.
  • assetlinks.json में लोअर केस सिग्नेचर होना. हस्ताक्षर ऐसा होना चाहिए अंग्रेज़ी के छोटे अक्षरों में लिखा होगा.
  • अगर 'Play ऐप्लिकेशन साइनिंग' का इस्तेमाल किया जा रहा है, तो पक्का करें कि आपने हस्ताक्षर का इस्तेमाल किया हो जिसकी मदद से Google आपकी हर रिलीज़ पर साइन करता है. इस जानकारी की पुष्टि की जा सकती है, साथ ही, एक पूरा JSON स्निपेट शामिल करना होगा. इसके लिए, वेबसाइटों को जोड़ने का एलान करना.