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>
आप नेविगेशन एडिटर का इस्तेमाल करके, एक इंप्लिसिट डीप लिंक बना सकते हैं गंतव्य इस प्रकार है:
- नेविगेशन एडिटर के डिज़ाइन टैब में, डीप लिंक.
- एट्रिब्यूट पैनल के डीप लिंक सेक्शन में + पर क्लिक करें.
स्क्रीन पर दिखने वाले डीप लिंक जोड़ें डायलॉग में, अपने डीप लिंक.
यहां दी गई बातों का ध्यान रखें:
- बिना स्कीम वाले यूआरआई को 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
की जानकारी नहीं दी गई है.
- बिना स्कीम वाले यूआरआई को http या https माना जाता है. उदाहरण के लिए,
(ज़रूरी नहीं) अपने-आप पुष्टि होने की सुविधा चुनें, ताकि Google यह पुष्टि कर सके कि आप का मालिक है. ज़्यादा जानकारी के लिए, यह देखें Android ऐप्लिकेशन के लिंक की पुष्टि करें.
जोड़ें पर क्लिक करें. लिंक का आइकॉन अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है चुने गए डेस्टिनेशन के ऊपर दिखता है, जो बताता है कि डेस्टिनेशन में डीप लिंक.
एक्सएमएल व्यू पर टॉगल करने के लिए, कोड टैब पर क्लिक करें. नेस्ट की गई
<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); }
अन्य संसाधन
नेविगेशन के बारे में ज़्यादा जानने के लिए, इन संसाधनों को देखें.