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

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

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

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

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

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

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

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

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

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

पहली इमेज. एक से ज़्यादा विकल्पों की जानकारी देने वाला डायलॉग

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

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

डीप लिंक के प्रकार

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

  • कस्टम डीप लिंक: ये ऐसे डीप लिंक होते हैं जो किसी ऐप्लिकेशन में मौजूद किसी खास कॉन्टेंट पर सीधे ले जाने के लिए, कस्टम यूआरआई स्कीम (जैसे कि example://products/123) का इस्तेमाल करते हैं. ये इंटरनल नेविगेशन या आपके कंट्रोल वाले सोर्स से आने वाले लिंक के लिए काम के होते हैं. हालांकि, ये स्टैंडर्ड वेब लिंक नहीं होते और अगर कोई दूसरा ऐप्लिकेशन, उसी कस्टम स्कीम के लिए रजिस्टर करता है, तो एक से ज़्यादा विकल्पों की जानकारी देने वाला डायलॉग अब भी ट्रिगर हो सकता है.
  • वेब लिंक: ये ऐसे डीप लिंक होते हैं जो स्टैंडर्ड 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**).

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

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