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
के लिए पुष्टि सिर्फ़ तब करेगा, जब 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
) पर पब्लिश करना होगा. उदाहरण के लिए, नीचे दिए गए इंटेंट फ़िल्टर वाला ऐप्लिकेशन, assetlinks.json
फ़ाइल https://example.com/.well-known/assetlinks.json
पर पब्लिश होने तक, example.com
के किसी भी सब-नाम (जैसे कि foo.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="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
को स्थानीय तौर पर चलाने से जनरेट किया गया सर्टिफ़िकेट फ़िंगरप्रिंट, उपयोगकर्ताओं के डिवाइसों पर मौजूद फ़िंगरप्रिंट से मेल नहीं खाएगा.Release > Setup > App signing
में जाकर, यह पुष्टि की जा सकती है कि आपने अपने Play Console डेवलपर खाते में, अपने ऐप्लिकेशन के लिए Play ऐप्लिकेशन साइनिंग का इस्तेमाल किया है या नहीं. अगर आपने ऐसा किया है, तो आपको उसी पेज पर अपने ऐप्लिकेशन के लिए सही डिजिटल ऐसेट लिंक 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"] } }]
अलग-अलग ऐप्लिकेशन, एक ही वेब होस्ट के तहत अलग-अलग संसाधनों के लिंक हैंडल कर सकते हैं. उदाहरण के लिए, ऐप्लिकेशन 1, https://example.com/articles
के लिए इंटेंट फ़िल्टर का एलान कर सकता है और ऐप्लिकेशन 2, 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
फ़ाइल को content-typeapplication/json
के साथ दिखाया जाता है.assetlinks.json
फ़ाइल को एचटीटीपीएस कनेक्शन से ऐक्सेस किया जा सकता हो. इससे कोई फ़र्क़ नहीं पड़ता कि आपके ऐप्लिकेशन के इंटेंट फ़िल्टर, एचटीटीपीएस को डेटा स्कीम के तौर पर मानते हैं या नहीं.assetlinks.json
फ़ाइल को किसी दूसरे यूआरएल पर रीडायरेक्ट किए बिना ऐक्सेस किया जा सकता हो. इसमें, 301 या 302 रीडायरेक्ट भी शामिल हैं.- अगर आपके ऐप्लिकेशन लिंक एक से ज़्यादा होस्ट डोमेन के साथ काम करते हैं, तो आपको हर डोमेन पर
assetlinks.json
फ़ाइल पब्लिश करनी होगी. एक से ज़्यादा होस्ट के लिए, ऐप्लिकेशन को लिंक करने की सुविधा देखें. - मेनिफ़ेस्ट फ़ाइल में ऐसे डेवलपर/टेस्ट यूआरएल के साथ अपना ऐप्लिकेशन पब्लिश न करें जिन्हें सार्वजनिक तौर पर ऐक्सेस नहीं किया जा सकता. जैसे, सिर्फ़ वीपीएन की मदद से ऐक्सेस किए जा सकने वाले यूआरएल. ऐसे मामलों में, एक अलग मेनिफ़ेस्ट फ़ाइल बनाने के लिए बिल्ड वैरिएंट को कॉन्फ़िगर करना होगा, ताकि डेवलपर बिल्ड के लिए एक अलग मेनिफ़ेस्ट फ़ाइल बनाई जा सके.
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
पर मौजूद डिजिटल ऐसेट लिंक फ़ाइल से जुड़ी वेबसाइटों से क्वेरी करता है.
अपने ऐप्लिकेशन से जोड़ने के लिए वेबसाइटों की सूची की पुष्टि करने और होस्ट की गई 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 175408749PACKAGE_NAME
किसी डिवाइस पर Android ऐप्लिकेशन लिंक की स्थिति रीसेट करना
किसी डिवाइस पर डोमेन की पुष्टि मैन्युअल तरीके से शुरू करने से पहले, आपको टेस्ट डिवाइस पर Android ऐप्लिकेशन लिंक की स्थिति को रीसेट करना होगा. ऐसा करने के लिए, टर्मिनल विंडो में यहां दिए गए कमांड को चलाएं:
adb shell pm set-app-links --packagePACKAGE_NAME 0 all
यह निर्देश, डिवाइस को उसी स्थिति में ले जाता है जिसमें वह किसी भी डोमेन के लिए डिफ़ॉल्ट ऐप्लिकेशन चुनने से पहले था.
डोमेन की पुष्टि की प्रक्रिया शुरू करना
किसी डिवाइस पर Android ऐप्लिकेशन के लिंक की स्थिति रीसेट करने के बाद, पुष्टि की प्रक्रिया खुद पूरी की जा सकती है. ऐसा करने के लिए, टर्मिनल विंडो में यह कमांड चलाएं:
adb shell pm verify-app-links --re-verifyPACKAGE_NAME
पुष्टि के नतीजों की समीक्षा करना
पुष्टि करने वाले एजेंट को अपने अनुरोध पूरे करने के लिए कुछ समय दें. इसके बाद, पुष्टि के नतीजों की समीक्षा करें. ऐसा करने के लिए, यह कमांड चलाएं:
adb shell pm get-app-linksPACKAGE_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
API को इस्तेमाल करने का तरीका बताता है:
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 }
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 curPACKAGE_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
से मैच करने वाली डेटा स्ट्रिंग शामिल हो. जैसा कि यहां दिए गए कोड स्निपेट में दिखाया गया है:
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)
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);
इंटेंट का इस्तेमाल करने पर, उपयोगकर्ताओं को डिफ़ॉल्ट रूप से खोलें नाम की सेटिंग स्क्रीन दिखती है. इस स्क्रीन पर, काम करने वाले लिंक खोलें नाम का एक रेडियो बटन होता है, जैसा कि पहली इमेज में दिखाया गया है.
जब उपयोगकर्ता काम करने वाले लिंक खोलें को चालू करता है, तो इस ऐप्लिकेशन में खोलने के लिए लिंक नाम के सेक्शन में चेकबॉक्स का एक सेट दिखता है. यहां से, उपयोगकर्ता उन डोमेन को चुन सकते हैं जिन्हें उन्हें आपके ऐप्लिकेशन से जोड़ना है. साथ ही, वे डोमेन जोड़ने के लिए लिंक जोड़ें को भी चुन सकते हैं, जैसा कि दूसरे चित्र में दिखाया गया है. जब उपयोगकर्ता बाद में, जोड़े गए डोमेन में से कोई लिंक चुनते हैं, तो वह लिंक आपके ऐप्लिकेशन में अपने-आप खुल जाता है.
अपने ऐप्लिकेशन में ऐसे डोमेन खोलना जिनकी पुष्टि आपका ऐप्लिकेशन नहीं कर सकता
हो सकता है कि आपके ऐप्लिकेशन का मुख्य फ़ंक्शन, तीसरे पक्ष के तौर पर लिंक खोलना हो. हालांकि, वह अपने मैनेज किए जा रहे डोमेन की पुष्टि नहीं कर सकता. अगर ऐसा है, तो उपयोगकर्ताओं को बताएं कि वे वेब लिंक चुनते समय, पहले पक्ष के ऐप्लिकेशन और आपके (तीसरे पक्ष) ऐप्लिकेशन में से किसी एक को नहीं चुन सकते. उपयोगकर्ताओं को डोमेन को आपके तीसरे पक्ष के ऐप्लिकेशन से मैन्युअल तरीके से जोड़ना होगा.
इसके अलावा, ऐसी डायलॉग या ट्रैंपोलिन गतिविधि शुरू करें जिससे उपयोगकर्ता, पहले पक्ष (ग्राहक) के ऐप्लिकेशन में लिंक खोल सके. ऐसा करने के लिए, अगर उपयोगकर्ता को प्रॉक्सी की तरह इस्तेमाल करना है. इस तरह के डायलॉग या ट्रैंपोलिन गतिविधि को सेट अप करने से पहले, अपने ऐप्लिकेशन को इस तरह से सेट अप करें कि वह आपके ऐप्लिकेशन के वेब इंटेंट फ़िल्टर से मैच करने वाले पहले पक्ष के ऐप्लिकेशन में पैकेज दिखे.
ऐप्लिकेशन के लिंक की जांच करें
ऐप्लिकेशन लिंक करने की सुविधा लागू करते समय, आपको लिंक करने के फ़ंक्शन की जांच करनी चाहिए, ताकि यह पक्का किया जा सके कि सिस्टम आपके ऐप्लिकेशन को आपकी वेबसाइटों से जोड़ सकता है. साथ ही, आपके हिसाब से यूआरएल के अनुरोधों को मैनेज कर सकता है.
किसी मौजूदा स्टेटमेंट फ़ाइल की जांच करने के लिए, स्टेटमेंट की सूची जनरेटर और टेस्टर टूल का इस्तेमाल किया जा सकता है.
पुष्टि करने के लिए होस्ट की सूची की पुष्टि करना
जांच करते समय, आपको उन होस्ट की सूची की पुष्टि करनी चाहिए जिनकी पुष्टि सिस्टम को आपके ऐप्लिकेशन के लिए करनी चाहिए. उन सभी यूआरएल की सूची बनाएं जिनके इंटेंट फ़िल्टर में ये एट्रिब्यूट और एलिमेंट शामिल हैं:
android:scheme
एट्रिब्यूट की वैल्यूhttp
याhttps
हो- डोमेन के यूआरएल पैटर्न वाली
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 स्निपेट का पूरा हिस्सा भी शामिल है.
- ऐप्लिकेशन को डीबग सर्टिफ़िकेट से साइन करना और