डीप लिंक बनाना

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

इस गाइड में बताया गया है कि डीप लिंकिंग कैसे काम करती है. साथ ही, अपने कॉन्टेंट के लिए डीप लिंक बनाने और उन्हें टेस्ट करने का तरीका भी बताया गया है.

अगर डीप लिंक आपकी वेबसाइट या डोमेन का रेफ़रंस देते हैं, तो हमारा सुझाव है कि आप ऐप्लिकेशन लिंक का इस्तेमाल करें. इससे उपयोगकर्ताओं को बेहतर और भरोसेमंद अनुभव मिलता है.

डीप लिंकिंग कैसे काम करती है

डीप लिंकिंग, Android की एक सामान्य सिस्टम सुविधा है. यह सभी वर्शन और सभी डिवाइसों पर काम करती है. यह Android के इंटेंट सिस्टम का इस्तेमाल करता है, ताकि डीप लिंक को उन ऐप्लिकेशन पर रीडायरेक्ट किया जा सके जिनमें लोगों की दिलचस्पी है. जो ऐप्लिकेशन किसी खास डीप लिंक यूआरआई को हैंडल करना चाहते हैं वे अपनी ऐप्लिकेशन मेनिफ़ेस्ट फ़ाइलों में, उससे मिलता-जुलता इंटेंट फ़िल्टर जोड़ते हैं.

रनटाइम के दौरान, जब उपयोगकर्ता किसी लिंक पर टैप करता है, तो Android एक इंटेंट ट्रिगर करता है और उसे किसी ऐप्लिकेशन पर रूट करने की कोशिश करता है. कई ऐप्लिकेशन, इंटेंट फ़िल्टर का एलान कर सकते हैं. ये फ़िल्टर, दिए गए यूआरआई से मेल खाते हैं. इसलिए, Android इंटेंट को रूट करने के लिए, इस क्रम में ये कार्रवाइयां करता है:

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

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

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

पहली इमेज. डायलॉग बॉक्स में मौजूद विकल्पों को अलग-अलग करके दिखाना

Android के अलग-अलग वर्शन में, डिसैंबिग्युएशन डायलॉग का व्यवहार अलग-अलग होता है. उदाहरण के लिए, Android 12 और इसके बाद के वर्शन पर, पुष्टि किए गए ऐप्लिकेशन लिंक नहीं होने पर, वेब लिंक डिफ़ॉल्ट रूप से वेब ब्राउज़र में खुलते हैं. वहीं, पिछले वर्शन पर, अगर कोई ऐप्लिकेशन वेब लिंक को हैंडल कर सकता है, तो एक से ज़्यादा विकल्पों की जानकारी देने वाला डायलॉग दिख सकता है.

ध्यान दें: Android 12 (एपीआई लेवल 31) से, सामान्य वेब इंटेंट आपके ऐप्लिकेशन में मौजूद किसी गतिविधि पर तब ही रीडायरेक्ट होगा, जब आपके ऐप्लिकेशन को उस वेब इंटेंट में शामिल किए गए डोमेन के लिए मंज़ूरी मिली हो. अगर आपके ऐप्लिकेशन को डोमेन के लिए मंज़ूरी नहीं मिली है, तो वेब इंटेंट, उपयोगकर्ता के डिफ़ॉल्ट ब्राउज़र ऐप्लिकेशन पर रीडायरेक्ट हो जाएगा.

डीप लिंक के टाइप

Android पर तीन तरह के डीप लिंक इस्तेमाल किए जा सकते हैं:

  • कस्टम डीप लिंक: ये ऐसे डीप लिंक होते हैं जो कस्टम यूआरआई स्कीम (जैसे कि example://products/123) का इस्तेमाल करते हैं. इनकी मदद से, किसी व्यक्ति को सीधे तौर पर ऐप्लिकेशन के किसी खास कॉन्टेंट पर ले जाया जाता है. ये इंटरनल नेविगेशन या आपके कंट्रोल वाले सोर्स से मिलने वाले लिंक के लिए बहुत काम के होते हैं. हालांकि, ये स्टैंडर्ड वेब लिंक नहीं होते हैं. अगर कोई दूसरा ऐप्लिकेशन एक ही कस्टम स्कीम रजिस्टर करता है, तो ये अब भी disambiguation dialog को ट्रिगर कर सकते हैं.
  • वेब लिंक: ये ऐसे डीप लिंक होते हैं जो स्टैंडर्ड http और https स्कीम का इस्तेमाल करते हैं. ये ज़्यादा वर्सटाइल होते हैं, क्योंकि ये स्टैंडर्ड यूआरएल होते हैं. हालांकि, Android 12 और उसके बाद के वर्शन पर, ये लगभग हमेशा डिसैंबिग्युएशन डायलॉग को ट्रिगर करते हैं. इसका मतलब है कि इन्हें डिफ़ॉल्ट रूप से, उपयोगकर्ता के वेब ब्राउज़र से हैंडल किया जाता है. इन्हें आपके ऐप्लिकेशन पर रीडायरेक्ट नहीं किया जाता.
  • ऐप्लिकेशन लिंक: ये Android 6.0 (एपीआई लेवल 23) से उपलब्ध हैं. ये पुष्टि किए गए वेब लिंक होते हैं. वेबसाइट को ऐप्लिकेशन से जोड़ने की प्रोसेस के ज़रिए, Android सिस्टम को यह साबित किया जा सकता है कि आपके पास डोमेन का मालिकाना हक है. पुष्टि हो जाने के बाद, सिस्टम उस डोमेन के लिंक को सीधे आपके ऐप्लिकेशन पर भेजता है. इससे, लिंक खोलने के लिए ऐप्लिकेशन चुनने का विकल्प नहीं दिखता. इससे आपके उपयोगकर्ताओं को भरोसेमंद और बेहतर अनुभव मिलता है.

आने वाले लिंक के लिए इंटेंट फ़िल्टर जोड़ना

अपने ऐप्लिकेशन के कॉन्टेंट का लिंक बनाने के लिए, अपने मेनिफ़ेस्ट में ऐसा इंटेंट फ़िल्टर जोड़ें जिसमें ये एलिमेंट और एट्रिब्यूट वैल्यू शामिल हों:

<action>

ACTION_VIEW इंटेंट ऐक्शन तय करें, ताकि Google Search से इंटेंट फ़िल्टर तक पहुंचा जा सके.

<data>

एक या उससे ज़्यादा <data> टैग जोड़ें. इनमें से हर टैग, यूआरआई फ़ॉर्मैट को दिखाता है. यह फ़ॉर्मैट, गतिविधि पर ले जाता है. कम से कम, <data> टैग में android:scheme एट्रिब्यूट शामिल होना चाहिए.

गतिविधि के लिए स्वीकार किए जाने वाले यूआरआई के टाइप को और बेहतर बनाने के लिए, ज़्यादा एट्रिब्यूट जोड़े जा सकते हैं. उदाहरण के लिए, आपके पास ऐसी कई गतिविधियां हो सकती हैं जो एक जैसे यूआरआई स्वीकार करती हैं. हालांकि, वे सिर्फ़ पाथ के नाम के आधार पर अलग-अलग होती हैं. ऐसे में, android:path एट्रिब्यूट या इसके pathPattern या pathPrefix वैरिएंट का इस्तेमाल करके, यह तय करें कि सिस्टम को अलग-अलग यूआरआई पाथ के लिए कौनसी गतिविधि खोलनी चाहिए.

<category>

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

DEFAULT कैटगरी भी शामिल करें. इससे आपका ऐप्लिकेशन, इंप्लिसिट इंटेंट का जवाब दे पाता है. इसके बिना, गतिविधि सिर्फ़ तब शुरू की जा सकती है, जब इंटेंट में आपके ऐप्लिकेशन कॉम्पोनेंट का नाम दिया गया हो.

यहां दिए गए एक्सएमएल स्निपेट में, डीप लिंकिंग के लिए मेनिफ़ेस्ट में इंटेंट फ़िल्टर तय करने का तरीका बताया गया है. यूआरआई "example://gizmos" और "http://www.example.com/gizmos", दोनों इस गतिविधि पर रीडायरेक्ट करते हैं.

<activity
    android:name="com.example.android.GizmosActivity"
    android:label="@string/title_gizmos" >
    <intent-filter android:label="@string/filter_view_http_gizmos">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <!-- Accepts URIs that begin with "http://www.example.com/gizmos” -->
        <data android:scheme="http"
              android:host="www.example.com"
              android:pathPrefix="/gizmos" />
        <!-- note that the leading "/" is required for pathPrefix-->
    </intent-filter>
    <intent-filter android:label="@string/filter_view_example_gizmos">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <!-- Accepts URIs that begin with "example://gizmos” -->
        <data android:scheme="example"
              android:host="gizmos" />
    </intent-filter>
</activity>

ध्यान दें कि दोनों इंटेंट फ़िल्टर में सिर्फ़ <data> एलिमेंट का अंतर है. हालांकि, एक ही फ़िल्टर में कई <data> एलिमेंट शामिल किए जा सकते हैं, लेकिन यह ज़रूरी है कि यूनीक यूआरएल (जैसे कि scheme और host का कोई खास कॉम्बिनेशन) का एलान करने के लिए, अलग-अलग फ़िल्टर बनाए जाएं. ऐसा इसलिए, क्योंकि एक ही इंटेंट फ़िल्टर में मौजूद कई <data> एलिमेंट को एक साथ मर्ज कर दिया जाता है, ताकि उनकी कंबाइंड एट्रिब्यूट के सभी वर्शन का हिसाब रखा जा सके. उदाहरण के लिए, यहां दिया गया तरीका अपनाएं:

<intent-filter>
  ...
  <data android:scheme="https" android:host="www.example.com" />
  <data android:scheme="app" android:host="open.my.app" />
</intent-filter>

ऐसा लग सकता है कि यह सिर्फ़ https://www.example.com और app://open.my.app के साथ काम करता है. हालांकि, यह इन दो के साथ-साथ इनके साथ भी काम करता है: app://www.example.com और https://open.my.app.

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

ऐप्लिकेशन मेनिफ़ेस्ट में, गतिविधि के कॉन्टेंट के लिए यूआरआई वाले इंटेंट फ़िल्टर जोड़ने के बाद, Android ऐसे किसी भी Intent को आपके ऐप्लिकेशन पर रीयल टाइम में रूट कर सकता है जिसके यूआरआई मिलते-जुलते हों.

इंटेंट फ़िल्टर तय करने के बारे में ज़्यादा जानने के लिए, अन्य ऐप्लिकेशन को आपकी गतिविधि शुरू करने की अनुमति देना लेख पढ़ें.

आने वाले इंटेंट से डेटा पढ़ना

सिस्टम, इंटेंट फ़िल्टर के ज़रिए आपकी गतिविधि शुरू करता है. इसके बाद, आपको रेंडर करने के लिए ज़रूरी चीज़ों का पता लगाने के लिए, Intent से मिले डेटा का इस्तेमाल किया जा सकता है. डेटा और इनकमिंग Intent से जुड़े ऐक्शन को वापस पाने के लिए, getData() और getAction() तरीकों को कॉल करें. इन तरीकों को गतिविधि के लाइफ़साइकल के दौरान कभी भी कॉल किया जा सकता है. हालांकि, आम तौर पर आपको ऐसा शुरुआती कॉलबैक के दौरान करना चाहिए. जैसे, onCreate() या onStart.

यहां एक स्निपेट दिया गया है, जिसमें Intent से डेटा वापस पाने का तरीका बताया गया है:

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main)

    val action: String? = intent?.action
    val data: Uri? = intent?.data
}

Java

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Intent intent = getIntent();
    String action = intent.getAction();
    Uri data = intent.getData();
}

उपयोगकर्ता को बेहतर अनुभव देने के लिए, इन सबसे सही तरीकों का पालन करें:

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

अपने डीप लिंक की जांच करना

Android डीबग ब्रिज के साथ गतिविधि मैनेजर (am) टूल का इस्तेमाल करके, यह जांच की जा सकती है कि डीप लिंकिंग के लिए तय किए गए इंटेंट फ़िल्टर यूआरआई, ऐप्लिकेशन की सही गतिविधि पर ले जाते हैं या नहीं. adb कमांड को किसी डिवाइस या एम्युलेटर के ख़िलाफ़ चलाया जा सकता है.

adb की मदद से, इंटेंट फ़िल्टर यूआरआई की जांच करने का सामान्य सिंटैक्स यह है:

$ adb shell am start
        -W -a android.intent.action.VIEW
        -d <URI> <PACKAGE>

उदाहरण के लिए, यहां दिया गया निर्देश, टारगेट ऐप्लिकेशन की उस गतिविधि को देखने की कोशिश करता है जो दिए गए यूआरआई से जुड़ी है.

$ adb shell am start
        -W -a android.intent.action.VIEW
        -d "example://gizmos" com.example.android

ध्यान दें: किसी रूट में प्रिमिटिव टाइप का कलेक्शन तय करते समय, जैसे कि **@Serializable data class Product(val colors: List)**, अपने-आप जनरेट होने वाले डीप लिंक यूआरएल का फ़ॉर्मैट **basePath?colors={value**} होता है. अगर आपको एक से ज़्यादा क्वेरी पैरामीटर वाला यूआरआई (उदाहरण के लिए, **basepath?colors=red&colors=blue**) तय करना है, तो आपको ऐंपरसैंड (उदाहरण के लिए, **basepath?colors=red\&colors=blue**) को एस्केप करना होगा.

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

इंटेंट और ऐप्लिकेशन लिंक के बारे में ज़्यादा जानने के लिए, यहां दिए गए संसाधन देखें: