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