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