ऐप्लिकेशन लिंक की पुष्टि करना

अगर आपके ऐप्लिकेशन के कम से कम एक इंटेंट फ़िल्टर में android:autoVerify="true" मौजूद है, तो Android 6.0 (एपीआई लेवल 23) या उसके बाद के वर्शन पर चलने वाले डिवाइस पर आपका ऐप्लिकेशन इंस्टॉल करने से, सिस्टम आपके ऐप्लिकेशन के इंटेंट फ़िल्टर में मौजूद यूआरएल से जुड़े होस्ट की पुष्टि अपने-आप कर लेता है. Android 12 और इसके बाद के वर्शन पर, पुष्टि करने के लॉजिक की जांच करने के लिए, पुष्टि करने की प्रोसेस को मैन्युअल तरीके से भी शुरू किया जा सकता है.

अपने-आप पुष्टि होने की सुविधा

सिस्टम में अपने-आप पुष्टि होने की सुविधा में ये शामिल हैं:

  1. सिस्टम, सभी इंटेंट फ़िल्टर की जांच करता है. इनमें से किसी भी फ़िल्टर में यह जानकारी शामिल हो सकती है:
    • काम: android.intent.action.VIEW
    • कैटगरी: android.intent.category.BROWSABLE और android.intent.category.DEFAULT
    • डेटा स्कीम: http या https
  2. ऊपर दिए गए इंटेंट फ़िल्टर में मिले हर यूनीक होस्ट नेम के लिए, 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 में दिखाया गया है. बाद में, जब उपयोगकर्ता जोड़े गए डोमेन में मौजूद किसी लिंक को चुनते हैं, तो वह लिंक आपके ऐप्लिकेशन में अपने-आप खुल जाता है.

रेडियो बटन चालू होने पर, सबसे नीचे मौजूद सेक्शन में चेकबॉक्स के साथ-साथ &#39;लिंक जोड़ें&#39; नाम का बटन भी दिखता है
पहली इमेज. सिस्टम सेटिंग की स्क्रीन, जहां उपयोगकर्ता यह चुन सकते हैं कि आपके ऐप्लिकेशन में कौनसे लिंक डिफ़ॉल्ट रूप से खुलें.
हर चेकबॉक्स, एक ऐसे डोमेन को दिखाता है जिसे जोड़ा जा सकता है. डायलॉग बॉक्स में, &#39;रद्द करें&#39; और &#39;जोड़ें&#39; बटन होते हैं.
दूसरी इमेज. डायलॉग बॉक्स, जहां उपयोगकर्ता आपके ऐप्लिकेशन से जोड़ने के लिए अन्य डोमेन चुन सकते हैं.

आपके ऐप्लिकेशन में ऐसे डोमेन खोलना जिनकी पुष्टि नहीं की जा सकती

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

इसके अलावा, एक डायलॉग या ट्रैम्पोलिन गतिविधि शुरू करने पर विचार करें. इससे उपयोगकर्ता को पहली पार्टी के ऐप्लिकेशन में लिंक खोलने की अनुमति मिलती है. ऐसा तब होता है, जब उपयोगकर्ता ऐसा करना चाहता है. यह गतिविधि, प्रॉक्सी के तौर पर काम करती है. इस तरह की डाइलॉग या ट्रैम्पोलिन गतिविधि सेट अप करने से पहले, अपने ऐप्लिकेशन को इस तरह से सेट अप करें कि उसके पास, पहले पक्ष के उन ऐप्लिकेशन के लिए पैकेज विज़िबिलिटी हो जो आपके ऐप्लिकेशन के वेब इंटेंट फ़िल्टर से मेल खाते हैं.