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

जब क्लिक किए गए किसी लिंक या प्रोग्रामैटिक अनुरोध से वेब यूआरआई इंटेंट शुरू होता है, तो 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 डीबग मेन्यू इंटेंट फ़िल्टर की जांच करने के लिए गतिविधि मैनेजर (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

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

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