डेस्टिनेशन के लिए डीप लिंक बनाना

Android में, डीप लिंक एक ऐसा लिंक होता है जो आपको सीधे डेस्टिनेशन पर.

नेविगेशन कॉम्पोनेंट से, दो अलग-अलग तरह के डीप लिंक बनाए जा सकते हैं: अश्लील और इंप्लिसिट.

साफ़ तौर पर डीप लिंक बनाना

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

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

आप NavDeepLinkBuilder का इस्तेमाल कर सकते हैं क्लास का इस्तेमाल करके PendingIntent बनाना है, जैसा कि नीचे उदाहरण में दिखाया गया है. ध्यान दें कि अगर दिया गया संदर्भ, Activity, कंस्ट्रक्टर इस्तेमाल करता है PackageManager.getLaunchIntentForPackage() को लॉन्च करने के लिए, इसे डिफ़ॉल्ट गतिविधि के तौर पर सेट किया जाता है.

Kotlin

val pendingIntent = NavDeepLinkBuilder(context)
    .setGraph(R.navigation.nav_graph)
    .setDestination(R.id.android)
    .setArguments(args)
    .createPendingIntent()

Java

PendingIntent pendingIntent = new NavDeepLinkBuilder(context)
    .setGraph(R.navigation.nav_graph)
    .setDestination(R.id.android)
    .setArguments(args)
    .createPendingIntent();

डिफ़ॉल्ट रूप से, NavDeepLinkBuilder आपके साफ़ तौर पर जानकारी देने वाले डीप लिंक को डिफ़ॉल्ट लॉन्च Activity, जिसका एलान आपके ऐप्लिकेशन के मेनिफ़ेस्ट में किया गया है. अगर आपने आपका NavHost किसी दूसरी गतिविधि में है, आपको उसका कॉम्पोनेंट बताना होगा डीप लिंक बिल्डर बनाते समय नाम:

Kotlin

val pendingIntent = NavDeepLinkBuilder(context)
    .setGraph(R.navigation.nav_graph)
    .setDestination(R.id.android)
    .setArguments(args)
    .setComponentName(DestinationActivity::class.java)
    .createPendingIntent()

Java

PendingIntent pendingIntent = new NavDeepLinkBuilder(context)
        .setGraph(R.navigation.nav_graph)
        .setDestination(R.id.android)
        .setArguments(args)
        .setComponentName(DestinationActivity.class)
        .createPendingIntent();

अगर आपके पास ComponentName है, तो इसे सीधे बिल्डर को पास किया जा सकता है:

Kotlin

val componentName = ...

val pendingIntent = NavDeepLinkBuilder(context)
    .setGraph(R.navigation.nav_graph)
    .setDestination(R.id.android)
    .setArguments(args)
    .setComponentName(componentName)
    .createPendingIntent()

Java

ComponentName componentName = ...;

PendingIntent pendingIntent = new NavDeepLinkBuilder(context)
        .setGraph(R.navigation.nav_graph)
        .setDestination(R.id.android)
        .setArguments(args)
        .setComponentName(componentName)
        .createPendingIntent();

अगर आपके पास कोई मौजूदा NavController है, तो डीप लिंक बनाने के लिए, NavController.createDeepLink().

इंप्लिसिट डीप लिंक बनाएं

इंप्लिसिट डीप लिंक का मतलब है खास डेस्टिनेशन पर दिखते हैं. डीप लिंक शुरू किए जाने पर—उदाहरण के लिए, जब कोई उपयोगकर्ता किसी लिंक पर क्लिक करता है—इसके बाद, Android आपके ऐप्लिकेशन को गंतव्य.

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

यहां डीप लिंक का उदाहरण दिया गया है, जिसमें यूआरआई, कार्रवाई, और एमआईएमई टाइप शामिल है:

<fragment android:id="@+id/a"
          android:name="com.example.myapplication.FragmentA"
          tools:layout="@layout/a">
        <deepLink app:uri="www.example.com"
                app:action="android.intent.action.MY_ACTION"
                app:mimeType="type/subtype"/>
</fragment>

आप नेविगेशन एडिटर का इस्तेमाल करके, एक इंप्लिसिट डीप लिंक बना सकते हैं गंतव्य इस प्रकार है:

  1. नेविगेशन एडिटर के डिज़ाइन टैब में, डीप लिंक.
  2. एट्रिब्यूट पैनल के डीप लिंक सेक्शन में + पर क्लिक करें.
  3. स्क्रीन पर दिखने वाले डीप लिंक जोड़ें डायलॉग में, अपने डीप लिंक.

    यहां दी गई बातों का ध्यान रखें:

    • बिना स्कीम वाले यूआरआई को http या https माना जाता है. उदाहरण के लिए, www.google.com http://www.google.com और, दोनों से मेल खाता है https://www.google.com.
    • {placeholder_name} के तौर पर पाथ पैरामीटर प्लेसहोल्डर, एक या एक से ज़्यादा से मेल खाते हैं वर्ण उदाहरण के लिए, http://www.example.com/users/{id} मिलान http://www.example.com/users/4. नेविगेशन कॉम्पोनेंट प्लेसहोल्डर से मिलान करके, प्लेसहोल्डर वैल्यू को सही टाइप में पार्स करें तय किए गए तर्क के नाम जो डीप लिंक डेस्टिनेशन के लिए तय किए गए हैं. अगर आपके पास यही नाम बताया गया है. आर्ग्युमेंट के लिए, डिफ़ॉल्ट String टाइप का इस्तेमाल किया गया है वैल्यू. 0 या उससे ज़्यादा वर्णों को मैच करने के लिए, .* वाइल्डकार्ड का इस्तेमाल किया जा सकता है.
    • क्वेरी पैरामीटर प्लेसहोल्डर का इस्तेमाल, इसके साथ या इसके साथ जोड़ा जा सकता है पाथ पैरामीटर का इस्तेमाल करें. उदाहरण के लिए, http://www.example.com/users/{id}?myarg={myarg} मिलान http://www.example.com/users/4?myarg=28.
    • डिफ़ॉल्ट या शून्य हो सकने वाली वैल्यू को मैच करने की ज़रूरत नहीं होती. उदाहरण के लिए, http://www.example.com/users/{id}?arg1={arg1}&arg2={arg2} मिलान http://www.example.com/users/4?arg2=28 या http://www.example.com/users/4?arg1=7. पाथ के साथ ऐसा नहीं होता है पैरामीटर का इस्तेमाल करें. उदाहरण के लिए, http://www.example.com/users?arg1=7&arg2=28 ऊपर दिए गए पैटर्न से मैच नहीं करता, क्योंकि ज़रूरी पाथ पैरामीटर यह है नहीं दी गई है.
    • ग़ैर-ज़रूरी क्वेरी पैरामीटर, डीप लिंक यूआरआई के मैचिंग पर असर नहीं डालते. इसके लिए उदाहरण, http://www.example.com/users/{id} मिलान http://www.example.com/users/4?extraneousParam=7, भले ही यूआरआई पैटर्न में extraneousParam की जानकारी नहीं दी गई है.
  4. (ज़रूरी नहीं) अपने-आप पुष्टि होने की सुविधा चुनें, ताकि Google यह पुष्टि कर सके कि आप का मालिक है. ज़्यादा जानकारी के लिए, यह देखें Android ऐप्लिकेशन के लिंक की पुष्टि करें.

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

  6. एक्सएमएल व्यू पर टॉगल करने के लिए, कोड टैब पर क्लिक करें. नेस्ट की गई <deepLink> गंतव्य में तत्व जोड़ दिया गया है:

    <deepLink app:uri="https://www.google.com" />
    

इंप्लिसिट डीप लिंकिंग को चालू करने के लिए, आपको अपने ऐप्लिकेशन के manifest.xml फ़ाइल. किसी भी गतिविधि में एक <nav-graph> एलिमेंट जोड़ें मौजूदा नेविगेशन ग्राफ़ पर ले जाता है, जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapplication">

    <application ... >

        <activity name=".MainActivity" ...>
            ...

            <nav-graph android:value="@navigation/nav_graph" />

            ...

        </activity>
    </application>
</manifest>

प्रोजेक्ट बनाते समय, नेविगेशन कॉम्पोनेंट <nav-graph> की जगह ले लेता है सभी डीप लिंक से मैच करने के लिए, जनरेट किए गए <intent-filter> एलिमेंट वाला एलिमेंट पर क्लिक करें.

इंप्लिसिट डीप लिंक को ट्रिगर करते समय, बैक स्टैक की स्थिति क्या इंप्लिसिट Intent को Intent.FLAG_ACTIVITY_NEW_TASK फ़्लैग करें:

  • अगर फ़्लैग सेट है, तो टास्क के बैक स्टैक को मिटा दिया जाता है और उसकी जगह डीप लिंक डेस्टिनेशन. अश्लील डीप लिंकिंग की तरह, जब नेस्टिंग ग्राफ़, नेस्टिंग के हर लेवल से शुरुआती डेस्टिनेशन—यानी, शुरुआत हैरारकी में हर <navigation> एलिमेंट के डेस्टिनेशन—को भी स्टैक को हटा दिया जाता है. इसका मतलब है कि जब कोई उपयोगकर्ता किसी डीप लिंक से 'वापस जाएं' बटन दबाता है लिंक डेस्टिनेशन को लिंक करते हैं, तो वे नेविगेशन स्टैक पर ठीक वैसे ही वापस नेविगेट करते हैं तो वे आपके ऐप्लिकेशन के एंट्री पॉइंट से आ गए हों.
  • अगर फ़्लैग सेट नहीं है, तो आप पिछले ऐप्लिकेशन के टास्क स्टैक पर बने रहते हैं जहां इंप्लिसिट डीप लिंक ट्रिगर हुआ. ऐसी स्थिति में, 'वापस जाएँ' बटन पर यह आपको पिछले ऐप्लिकेशन पर वापस ले जाता है, जबकि 'अप ऐरो' बटन से ऐप्लिकेशन का टास्क शुरू किया जा सकता है पर भी अलग-अलग वैल्यू मिल सकती हैं.

डीप लिंक मैनेज करना

हमारा सुझाव है कि आप हमेशा डिफ़ॉल्ट सेटिंग का इस्तेमाल करें standard में से launchMode जानें. standard लॉन्च मोड इस्तेमाल करते समय, नेविगेशन कॉल करके डीप लिंक को अपने-आप मैनेज करता है handleDeepLink() का इस्तेमाल करें.Intent हालांकि, अगर किसी डिवाइस पर Activity का फिर से इस्तेमाल किया जाता है, तो ऐसा अपने-आप नहीं होता कोई वैकल्पिक launchMode, जैसे कि singleTop. इस स्थिति में, यह ज़रूरी है handleDeepLink() को onNewIntent() में मैन्युअल तरीके से कॉल करने के लिए, जैसा कि नीचे दिया गया उदाहरण:

Kotlin

override fun onNewIntent(intent: Intent?) {
    super.onNewIntent(intent)
    navController.handleDeepLink(intent)
}

Java

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    navController.handleDeepLink(intent);
}

अन्य संसाधन

नेविगेशन के बारे में ज़्यादा जानने के लिए, इन संसाधनों को देखें.

सैंपल

कोड लैब

वीडियो