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