Android ऐप्लिकेशन लिंक, एक खास तरह का डीप लिंक होता है. इससे आपकी वेबसाइट के यूआरएल, Android ऐप्लिकेशन में तुरंत उससे जुड़ा कॉन्टेंट खोल सकते हैं. इसके लिए, उपयोगकर्ता को ऐप्लिकेशन चुनने की ज़रूरत नहीं होती. Android ऐप्लिकेशन लिंक, Digital Asset Links API का इस्तेमाल करते हैं. इससे यह भरोसा कायम होता है कि आपकी वेबसाइट ने आपके ऐप्लिकेशन को उस डोमेन के लिंक अपने-आप खोलने की अनुमति दी है. अगर सिस्टम यह पुष्टि कर लेता है कि आपके पास यूआरएल का मालिकाना हक है, तो सिस्टम उन यूआरएल इंटेंट को आपके ऐप्लिकेशन पर अपने-आप भेज देता है.
यह पुष्टि करने के लिए कि आपके पास ऐप्लिकेशन और वेबसाइट के यूआरएल, दोनों का मालिकाना हक है, यह तरीका अपनाएं:
इंटेंट फ़िल्टर जोड़ें जिनमें
autoVerify
एट्रिब्यूट शामिल हो. इस एट्रिब्यूट से सिस्टम को यह सिग्नल मिलता है कि उसे यह पुष्टि करनी चाहिए कि आपका ऐप्लिकेशन, इंटेंट फ़िल्टर में इस्तेमाल किए गए यूआरएल डोमेन से जुड़ा है या नहीं.अपनी वेबसाइट और इंटेंट फ़िल्टर के बीच संबंध का एलान करें. इसके लिए, डिजिटल ऐसेट लिंक की 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". -->
<!-- Do not include other schemes. -->
<data android:scheme="http" />
<data android:scheme="https" />
<!-- Include one or more domains that should be verified. -->
<data android:host="..." />
</intent-filter>
हर होस्ट के लिए, सिर्फ़ एक <intent-filter>
एलान में autoVerify
शामिल करना काफ़ी है. भले ही, उस होस्ट का इस्तेमाल बिना मार्क किए गए अन्य एलान में किया गया हो. हालांकि, हमारा सुझाव है कि आप हर <intent-filter>
एलिमेंट में autoVerify
जोड़ें, ताकि एक जैसा डेटा दिखे. इससे यह भी पक्का होता है कि मेनिफ़ेस्ट फ़ाइल में मौजूद एलिमेंट हटाने या उनमें बदलाव करने के बाद भी, आपका ऐप्लिकेशन उन सभी डोमेन से जुड़ा रहे जिन्हें आपने अब भी तय किया है.
डोमेन की पुष्टि करने के लिए, इंटरनेट कनेक्शन होना ज़रूरी है. साथ ही, इस प्रोसेस को पूरा होने में कुछ समय लग सकता है. इस प्रोसेस को ज़्यादा असरदार बनाने के लिए, सिस्टम सिर्फ़ उस डोमेन की पुष्टि करता है जो Android 12 या उसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए है. ऐसा तब होता है, जब वह डोमेन <intent-filter>
एलिमेंट में मौजूद हो और उसमें ऊपर दिए गए कोड स्निपेट में बताया गया फ़ॉर्मैट मौजूद हो.
उदाहरण के लिए, "http" और "https" के अलावा अन्य स्कीम, जैसे कि <data android:scheme="custom" />
, <intent-filter>
को डोमेन की पुष्टि करने से रोकेंगी.
एक से ज़्यादा होस्ट के लिए, ऐप्लिकेशन लिंक करने की सुविधा
सिस्टम को, ऐप्लिकेशन के यूआरएल इंटेंट फ़िल्टर के डेटा एलिमेंट में बताए गए होस्ट की पुष्टि करनी होगी. इसके लिए, उसे उस इंटेंट फ़िल्टर में मौजूद वेब डोमेन पर होस्ट की गई डिजिटल ऐसेट लिंक फ़ाइलों का इस्तेमाल करना होगा. पुष्टि न होने पर, सिस्टम अपने स्टैंडर्ड तरीके से काम करता है. इससे इंटेंट को हल किया जा सकता है. इसके बारे में ऐप्लिकेशन के कॉन्टेंट पर ले जाने वाले डीप लिंक बनाना लेख में बताया गया है. हालांकि, ऐप्लिकेशन के अन्य इंटेंट फ़िल्टर में तय किए गए किसी भी यूआरएल पैटर्न के लिए, ऐप्लिकेशन की पुष्टि अब भी डिफ़ॉल्ट हैंडलर के तौर पर की जा सकती है.
ध्यान दें: Android 11 (एपीआई लेवल 30) और इससे पहले के वर्शन पर, सिस्टम आपके ऐप्लिकेशन की पुष्टि डिफ़ॉल्ट हैंडलर के तौर पर तब तक नहीं करता, जब तक उसे मेनिफ़ेस्ट में तय किए गए सभी होस्ट के लिए, मिलती-जुलती डिजिटल ऐसेट लिंक फ़ाइल नहीं मिल जाती.
उदाहरण के लिए, अगर https://www.example.com/.well-known/assetlinks.json
पर assetlinks.json
फ़ाइल मिली है, लेकिन https://www.example.net/.well-known/assetlinks.json
पर नहीं, तो इस इंटेंट वाले ऐप्लिकेशन की पुष्टि सिर्फ़ https://www.example.com
के लिए की जाएगी:
फ़िल्टर:
<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 की मदद से फ़िंगरप्रिंट जनरेट करने के लिए, इस निर्देश का इस्तेमाल करें: इस फ़ील्ड में एक से ज़्यादा फ़िंगरप्रिंट इस्तेमाल किए जा सकते हैं. इनका इस्तेमाल, ऐप्लिकेशन के अलग-अलग वर्शन के लिए किया जा सकता है. जैसे, डीबग और प्रोडक्शन बिल्ड.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
फ़ाइलों में एक ही ऐप्लिकेशन के साथ असोसिएशन का एलान कर सकती हैं. यहां दी गई फ़ाइल की लिस्टिंग में, यह उदाहरण दिखाया गया है कि example.com और example.net को app1 से जोड़ने का एलान कैसे किया जाता है. पहली लिस्टिंग में, 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
फ़ाइल को content-typeapplication/json
के साथ दिखाया गया हो.assetlinks.json
फ़ाइल को एचटीटीपीएस कनेक्शन पर ऐक्सेस किया जाना चाहिए. इससे कोई फ़र्क़ नहीं पड़ता कि आपके ऐप्लिकेशन के इंटेंट फ़िल्टर, एचटीटीपीएस को डेटा स्कीम के तौर पर मानते हैं या नहीं.assetlinks.json
फ़ाइल को, किसी दूसरे यूआरएल पर रीडायरेक्ट हुए बिना ऐक्सेस किया जा सकता हो. इसमें, 301 या 302 रीडायरेक्ट शामिल नहीं हैं.- अगर आपके ऐप्लिकेशन लिंक, एक से ज़्यादा होस्ट डोमेन के साथ काम करते हैं, तो आपको हर डोमेन पर
assetlinks.json
फ़ाइल पब्लिश करनी होगी. एक से ज़्यादा होस्ट के लिए, ऐप्लिकेशन लिंक करने की सुविधा देखें. - अपने ऐप्लिकेशन को मेनिफ़ेस्ट फ़ाइल में dev/test यूआरएल के साथ पब्लिश न करें. ऐसा हो सकता है कि ये यूआरएल, आम लोगों के लिए उपलब्ध न हों. जैसे, ऐसे यूआरएल जो सिर्फ़ वीपीएन से ऐक्सेस किए जा सकते हैं. ऐसे मामलों में, बिल्ड वैरिएंट कॉन्फ़िगर करके, डेवलपमेंट बिल्ड के लिए अलग मेनिफ़ेस्ट फ़ाइल जनरेट की जा सकती है.
Android ऐप्लिकेशन के लिंक की पुष्टि करना
अगर आपके ऐप्लिकेशन के कम से कम एक इंटेंट फ़िल्टर में android:autoVerify="true"
मौजूद है, तो Android 6.0 (एपीआई लेवल 23) या उसके बाद के वर्शन पर चलने वाले डिवाइस पर ऐप्लिकेशन इंस्टॉल करने से, सिस्टम आपके ऐप्लिकेशन के इंटेंट फ़िल्टर में मौजूद यूआरएल से जुड़े होस्ट की पुष्टि अपने-आप कर लेता है. Android 12 और इसके बाद के वर्शन पर, पुष्टि करने के लॉजिक की जांच करने के लिए, पुष्टि करने की प्रोसेस को मैन्युअल तरीके से शुरू किया जा सकता है.
अपने-आप पुष्टि होने की सुविधा
सिस्टम में अपने-आप पुष्टि होने की सुविधा में ये शामिल हैं:
- सिस्टम, सभी इंटेंट फ़िल्टर की जांच करता है. इनमें से किसी भी फ़िल्टर में यह जानकारी शामिल हो सकती है:
- काम:
android.intent.action.VIEW
- कैटगरी:
android.intent.category.BROWSABLE
औरandroid.intent.category.DEFAULT
- डेटा स्कीम:
http
याhttps
- काम:
- ऊपर दिए गए इंटेंट फ़िल्टर में मौजूद हर यूनीक होस्ट नेम के लिए, Android
https://hostname/.well-known/assetlinks.json
पर मौजूद Digital Asset Links फ़ाइल के लिए, उससे जुड़ी वेबसाइटों से क्वेरी करता है.
अपने ऐप्लिकेशन से जुड़ी वेबसाइटों की सूची की पुष्टि करने के बाद, अपने डिवाइस पर ऐप्लिकेशन इंस्टॉल करें. साथ ही, यह भी पुष्टि करें कि होस्ट की गई 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
नीचे दिए गए कोड स्निपेट में, 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);
इंटेंट शुरू होने पर, उपयोगकर्ताओं को सेटिंग स्क्रीन दिखती है. इसे डिफ़ॉल्ट रूप से खोलने की सुविधा कहा जाता है. इस स्क्रीन में, सहायता लिंक खोलें नाम का एक रेडियो बटन होता है. इसे पहली इमेज में दिखाया गया है.
जब उपयोगकर्ता YouTube पर काम करने वाले लिंक खोलें सुविधा चालू करता है, तो इस ऐप्लिकेशन में लिंक खोलें सेक्शन में चेकबॉक्स का एक सेट दिखता है. यहां से, उपयोगकर्ता उन डोमेन को चुन सकते हैं जिन्हें उन्हें आपके ऐप्लिकेशन से जोड़ना है. वे डोमेन जोड़ने के लिए, लिंक जोड़ें विकल्प भी चुन सकते हैं. जैसा कि इमेज 2 में दिखाया गया है. बाद में, जब उपयोगकर्ता जोड़े गए डोमेन में मौजूद किसी लिंक को चुनते हैं, तो वह लिंक आपके ऐप्लिकेशन में अपने-आप खुल जाता है.
आपके ऐप्लिकेशन में ऐसे डोमेन खोलना जिनकी पुष्टि नहीं की जा सकती
ऐसा हो सकता है कि आपके ऐप्लिकेशन का मुख्य फ़ंक्शन, तीसरे पक्ष के तौर पर लिंक खोलना हो. हालांकि, इसके पास मैनेज किए गए डोमेन की पुष्टि करने की सुविधा नहीं होती. अगर ऐसा है, तो उपयोगकर्ताओं को बताएं कि जब वे किसी वेब लिंक को चुनते हैं, तो वे पहले पक्ष के ऐप्लिकेशन और आपके (तीसरे पक्ष) ऐप्लिकेशन में से किसी एक को नहीं चुन सकते. उपयोगकर्ताओं को डोमेन को आपके तीसरे पक्ष के ऐप्लिकेशन से मैन्युअल तरीके से जोड़ना होगा.
इसके अलावा, एक डायलॉग या ट्रैम्पोलिन गतिविधि शुरू करने पर विचार करें. इससे उपयोगकर्ता को पहली पार्टी के ऐप्लिकेशन में लिंक खोलने की अनुमति मिलती है. ऐसा तब होता है, जब उपयोगकर्ता ऐसा करना चाहता है. यह गतिविधि, प्रॉक्सी के तौर पर काम करती है. इस तरह का डायलॉग या ट्रैम्पोलिन गतिविधि सेट अप करने से पहले, अपने ऐप्लिकेशन को इस तरह से सेट अप करें कि उसके पास, पहले पक्ष के उन ऐप्लिकेशन के लिए पैकेज विज़िबिलिटी हो जो आपके ऐप्लिकेशन के वेब इंटेंट फ़िल्टर से मेल खाते हैं.
ऐप्लिकेशन के लिंक की जांच करना
ऐप्लिकेशन लिंक करने की सुविधा लागू करते समय, आपको लिंक करने की सुविधा की जांच करनी चाहिए. इससे यह पक्का किया जा सकेगा कि सिस्टम, आपके ऐप्लिकेशन को आपकी वेबसाइटों से जोड़ सकता है और यूआरएल के अनुरोधों को आपकी उम्मीद के मुताबिक हैंडल कर सकता है.
किसी मौजूदा स्टेटमेंट फ़ाइल की जांच करने के लिए, स्टेटमेंट की सूची जनरेट करने और उसकी जांच करने वाले टूल का इस्तेमाल किया जा सकता है.
पुष्टि करने के लिए होस्ट की सूची की पुष्टि करना
टेस्टिंग के दौरान, आपको उन होस्ट की सूची की पुष्टि करनी चाहिए जिनकी पुष्टि सिस्टम को आपके ऐप्लिकेशन के लिए करनी चाहिए. उन सभी यूआरएल की सूची बनाएं जिनके इंटेंट फ़िल्टर में ये एट्रिब्यूट और एलिमेंट शामिल हैं:
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 स्निपेट भी शामिल है.
- ऐप्लिकेशन को डीबग सर्टिफ़िकेट से साइन करना और