डीप लिंकिंग की मदद से, उपयोगकर्ताओं को वेब ब्राउज़र, सूचनाओं, सोशल मीडिया, विज्ञापनों, और अन्य सोर्स से सीधे आपके ऐप्लिकेशन पर लाया जा सकता है. डीप लिंक, ऐप्लिकेशन-टू-ऐप्लिकेशन और वेब-टू-ऐप्लिकेशन ट्रांज़िशन की सुविधा देते हैं. इससे आपको संदर्भ के हिसाब से टारगेट किए गए कॉन्टेंट के ज़रिए, यूज़र ऐक्टिविटी बढ़ाने में मदद मिल सकती है.
इस गाइड में बताया गया है कि डीप लिंकिंग की सुविधा कैसे काम करती है. साथ ही, अपने कॉन्टेंट के लिए डीप लिंक बनाने और उन्हें टेस्ट करने का तरीका भी बताया गया है.
आपकी वेबसाइट या डोमेन को रेफ़र करने वाले डीप लिंक के लिए, हमारा सुझाव है कि आप ऐप्लिकेशन लिंक का इस्तेमाल करें. इससे आपके उपयोगकर्ताओं को बेहतर और भरोसेमंद अनुभव मिलता है.
डीप लिंकिंग की सुविधा कैसे काम करती है
डीप लिंकिंग, Android की एक सामान्य सिस्टम क्षमता है. यह सभी डिवाइसों पर, सभी वर्शन पर काम करती है. यह Android के इंटेंट सिस्टम का इस्तेमाल करके, डीप लिंक को उन ऐप्लिकेशन पर भेजता है जो उपयोगकर्ताओं के काम के हो सकते हैं. अगर किसी ऐप्लिकेशन को किसी खास डीप लिंक यूआरआई को हैंडल करना है, तो उसे अपनी ऐप्लिकेशन मेनिफ़ेस्ट फ़ाइलों में, उससे मैच होने वाले इंटेंट फ़िल्टर का एलान करना होगा.
रनटाइम के दौरान, जब उपयोगकर्ता किसी लिंक पर टैप करता है, तो Android एक इंटेंट ट्रिगर करता है और उसे किसी ऐप्लिकेशन पर रूट करने की कोशिश करता है. ऐसा इसलिए होता है, क्योंकि कई ऐप्लिकेशन ऐसे इंटेंट फ़िल्टर का एलान कर सकते हैं जो किसी यूआरआई से मैच करते हैं. Android, इंटेंट को रूट करने के लिए, इस क्रम में ये कार्रवाइयां करता है:
- उपयोगकर्ता का वह डिफ़ॉल्ट ऐप्लिकेशन खोलें जो यूआरआई को हैंडल कर सकता है. हालांकि, ऐसा तब ही होगा, जब कोई ऐप्लिकेशन तय किया गया हो.
- यूआरआई को हैंडल करने वाला सिर्फ़ एक ऐप्लिकेशन खोलें.
- उपयोगकर्ता को डिसऐंबिग्युएशन डायलॉग से कोई ऐप्लिकेशन चुनने की अनुमति दें.
इसका मतलब है कि भले ही आपके इंटेंट फ़िल्टर किसी यूआरआई से मैच करते हों, लेकिन इस बात की कोई गारंटी नहीं है कि सिस्टम, डीप लिंक इंटेंट को आपके ऐप्लिकेशन पर रूट करेगा. उपयोगकर्ता की यह तय करने में अहम भूमिका होती है कि कौनसा ऐप्लिकेशन इंटेंट को मैनेज करेगा. इससे उपयोगकर्ता को कंट्रोल और विकल्प मिलते हैं. अपनी वेबसाइट और डोमेन के डीप लिंक पर ज़्यादा कंट्रोल पाने के लिए, ऐप्लिकेशन लिंक इस्तेमाल करके देखें.
Android के डिसऐंबिग्युएशन डायलॉग की मदद से, उपयोगकर्ता इंस्टॉल किए गए उन सभी ऐप्लिकेशन को देख सकता है जिन्होंने डीप लिंक इंटेंट को मैनेज करने के लिए रजिस्टर किया है. उपयोगकर्ता, इस तरह के लिंक के लिए किसी ऐप्लिकेशन को डिफ़ॉल्ट के तौर पर भी चुन सकता है. जब उपयोगकर्ता किसी ऐप्लिकेशन को डिफ़ॉल्ट के तौर पर सेट कर देता है, तो सिस्टम उस इंटेंट के लिए डायलॉग बॉक्स नहीं दिखाता है. साथ ही, चुना गया ऐप्लिकेशन अपने-आप खुल जाता है.
Android के अलग-अलग वर्शन में, साफ़ तौर पर जानकारी देने वाले डायलॉग बॉक्स के काम करने के तरीके में बदलाव हुआ है. उदाहरण के लिए, Android 12 और इसके बाद के वर्शन पर, ऐसे वेब लिंक जो पुष्टि किए गए ऐप्लिकेशन लिंक नहीं हैं वे आम तौर पर डिफ़ॉल्ट रूप से वेब ब्राउज़र में खुलेंगे. वहीं, पिछले वर्शन पर, अगर कोई ऐप्लिकेशन वेब लिंक को हैंडल कर सकता है, तो हो सकता है कि एक से ज़्यादा विकल्पों की जानकारी देने वाला डायलॉग दिखे.
डीप लिंक के टाइप
Android पर तीन तरह के डीप लिंक इस्तेमाल किए जा सकते हैं:
- कस्टम डीप लिंक: ये ऐसे डीप लिंक होते हैं जो कस्टम यूआरआई स्कीम (जैसे,
example://products/123) का इस्तेमाल करके, उपयोगकर्ता को सीधे ऐप्लिकेशन में मौजूद किसी खास कॉन्टेंट पर ले जाते हैं. ये लिंक, ऐप्लिकेशन में मौजूद कॉन्टेंट पर नेविगेट करने या आपके कंट्रोल वाले सोर्स से लिंक करने के लिए असरदार होते हैं. हालांकि, ये स्टैंडर्ड वेब लिंक नहीं होते. अगर कोई दूसरा ऐप्लिकेशन उसी कस्टम स्कीम को रजिस्टर करता है, तो ये लिंक अब भी साफ़ तौर पर जानकारी देने वाले डायलॉग को ट्रिगर कर सकते हैं. - वेब लिंक: ये ऐसे डीप लिंक होते हैं जो स्टैंडर्ड
httpऔरhttpsस्कीम का इस्तेमाल करते हैं. ये ज़्यादा काम के होते हैं, क्योंकि ये स्टैंडर्ड यूआरएल होते हैं. हालांकि, Android 12 और इसके बाद के वर्शन पर, ये यूआरएल करीब-करीब हमेशा ही, साफ़ तौर पर जानकारी देने वाले डायलॉग बॉक्स को ट्रिगर करेंगे. इसका मतलब है कि ये यूआरएल, आपके ऐप्लिकेशन पर रूट किए जाने के बजाय, डिफ़ॉल्ट रूप से उपयोगकर्ता के वेब ब्राउज़र से मैनेज किए जा सकते हैं. - ऐप्लिकेशन के लिंक: ये पुष्टि किए गए वेब लिंक होते हैं. ये Android 6.0 (एपीआई लेवल 23) और इसके बाद के वर्शन पर उपलब्ध हैं. वेबसाइट असोसिएशन की प्रोसेस के ज़रिए, Android सिस्टम को यह साबित किया जा सकता है कि डोमेन का मालिकाना हक आपके पास है. पुष्टि होने के बाद, सिस्टम उस डोमेन के लिंक को सीधे आपके ऐप्लिकेशन पर भेज देता है. इससे, एक से ज़्यादा विकल्पों की जानकारी देने वाला डायलॉग पूरी तरह से स्किप हो जाता है. इससे आपके उपयोगकर्ताओं को भरोसेमंद और बेहतर अनुभव मिलता है.
इनकमिंग लिंक के लिए इंटेंट फ़िल्टर जोड़ना
अपने ऐप्लिकेशन के कॉन्टेंट का लिंक बनाने के लिए, अपने मेनिफ़ेस्ट में एक इंटेंट फ़िल्टर जोड़ें. इसमें ये एलिमेंट और एट्रिब्यूट की वैल्यू शामिल होनी चाहिए:
ACTION_VIEW इंटेंट ऐक्शन तय करें, ताकि Google Search से इंटेंट फ़िल्टर तक पहुंचा जा सके.
एक या उससे ज़्यादा <data> टैग जोड़ें. इनमें से हर टैग, यूआरआई फ़ॉर्मैट को दिखाता है, जो गतिविधि को रिज़ॉल्व करता है. <data> टैग में कम से कम android:scheme एट्रिब्यूट शामिल होना चाहिए.
गतिविधि के लिए स्वीकार किए जाने वाले यूआरआई के टाइप को और बेहतर बनाने के लिए, ज़्यादा एट्रिब्यूट जोड़े जा सकते हैं. उदाहरण के लिए, आपके पास ऐसी कई गतिविधियां हो सकती हैं जो एक जैसे यूआरआई स्वीकार करती हैं, लेकिन पाथ के आधार पर अलग-अलग होती हैं. इस मामले में, android:path एट्रिब्यूट या इसके pathPattern या pathPrefix वैरिएंट का इस्तेमाल करें. इससे सिस्टम को यह पता चलता है कि अलग-अलग यूआरआई पाथ के लिए, कौनसी गतिविधि खोलनी है.
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 रनटाइम के दौरान आपके ऐप्लिकेशन में, मैच होने वाले यूआरआई वाले किसी भी 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
Android 17 से, am start के साथ --debug-link फ़्लैग का भी इस्तेमाल किया जा सकता है. इससे यह पता लगाया जा सकता है कि सिस्टम किसी यूआरएल को कैसे रिज़ॉल्व करता है. साथ ही, मैच होने वाले इंटेंट फ़िल्टर या डाइनैमिक ऐप्लिकेशन लिंक के नियमों की जांच की जा सकती है. ज़्यादा जानकारी के लिए,
debug-link फ़्लैग की मदद से, लिंक रिज़ॉल्यूशन का विश्लेषण करना लेख पढ़ें.
मेनिफ़ेस्ट में किया गया एलान और सेट किया गया इंटेंट हैंडलर, आपके ऐप्लिकेशन और वेबसाइट के बीच के कनेक्शन को तय करता है. साथ ही, यह तय करता है कि आने वाले लिंक का क्या करना है. हालांकि, यूआरआई के सेट के लिए, सिस्टम आपके ऐप्लिकेशन को डिफ़ॉल्ट हैंडलर के तौर पर इस्तेमाल करे, इसके लिए आपको सिस्टम से इस कनेक्शन की पुष्टि करने का अनुरोध भी करना होगा. ऐप्लिकेशन लिंक की पुष्टि करना लेख में, पुष्टि करने की इस सुविधा को लागू करने का तरीका बताया गया है.
इंटेंट और ऐप्लिकेशन के लिंक के बारे में ज़्यादा जानने के लिए, ये संसाधन देखें:
- इंटेंट और इंटेंट फ़िल्टर
- अन्य ऐप्लिकेशन को आपकी गतिविधि शुरू करने की अनुमति देना
- Android Studio की मदद से, Android ऐप्लिकेशन के लिंक जोड़ना