ऐप्लिकेशन के कॉन्टेंट के डीप लिंक बनाना

जब क्लिक किए गए किसी लिंक या प्रोग्रामैटिक अनुरोध से वेब यूआरआई इंटेंट शुरू होता है, तो Android सिस्टम नीचे दी गई हर कार्रवाई को क्रम से तब तक आज़माता है, जब तक अनुरोध पूरा नहीं हो जाता:

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

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

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

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

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

<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 से मिले डेटा का इस्तेमाल करें. कॉल करें getData() और डेटा वापस पाने के getAction() तरीके और इनकमिंग Intent से जुड़ी कार्रवाई. गतिविधि के लाइफ़साइकल के दौरान, इन तरीकों को कभी भी कॉल किया जा सकता है. हालांकि, आम तौर पर ऐसा 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 Debug Bridge को ऐक्टिविटी मैनेजर (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

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

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