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