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