इनकमिंग DeepLinkRequest इंस्टेंस को उन कुंजियों से मैप करने के लिए जिन्हें आपके ऐप्लिकेशन के बैक स्टैक में जोड़ा जा सकता है, आपको DeepLinkMatcher इंस्टेंस तय करने होंगे.
DeepLinkMatcher एक ऐब्स्ट्रैक्ट क्लास है, जिसमें दो तरीके शामिल हैं: match और matchRequest. सबक्लास को matchRequest लागू करना होगा. यह DeepLinkRequest लेता है और अनुरोध मैच होने पर DeepLinkMatcher.MatchResult दिखाता है. ऐसा न होने पर, null दिखाता है.
एक ही अनुरोध से कई मैच करने वाले मैच हो सकते हैं. इसलिए, MatchResult नतीजों को रैंक करने और सबसे सही मैच चुनने के लिए, Comparable लागू करता है.
टाइप पैरामीटर
DeepLinkMatcher क्लास, दो सामान्य टाइप के पैरामीटर के बारे में बताती है:
DeepLinkMatcher<T : Any, R : DeepLinkMatcher.MatchResult<T>>.
T : Any: डीप लिंक मैच होने पर, डेस्टिनेशन नेविगेशन कुंजी का टाइप (जैसे,UserProfileKeyयाNavKey) दिखाया जाता है.R : DeepLinkMatcher.MatchResult<T>:matchRequestऔरmatchसे मिलाMatchResultका सब-टाइप.
दूसरा टाइप पैरामीटर, R, मैच की खास जानकारी को सुरक्षित रखता है. इसके लिए, अनचेक्ड डाउनकास्टिंग की ज़रूरत नहीं होती:
StaticKeyDeepLinkMatcher,RकोDeepLinkMatcher.MatchResult<T>से बाइंड करता है.UriDeepLinkMatcher,RकोUriMatchResultसे बाइंड करता है. साथ ही, पार्स किए गए पाथ और क्वेरी आर्ग्युमेंट को पैटर्न-मैचिंग स्कोर के साथ बनाए रखता है.BackStackMatcher,RकोBackStackMatchResultसे बाइंड करता है. साथ ही,withBackStackसे बनाई गई सिंथेटिक पिछली गतिविधियां लिस्ट को बनाए रखता है.
अनुरोधों को पहले से फ़िल्टर करना
DeepLinkMatcher के लागू होने पर, DeepLinkMatcher.Filter इंस्टेंस की सूची तय की जा सकती है. इससे अनुरोधों का आकलन करने से पहले, उन्हें फ़िल्टर किया जा सकता है.
लाइब्रेरी में सामान्य फ़िल्टर बनाने के लिए, हेल्पर फ़ंक्शन शामिल हैं:
DeepLinkMatcher.mimeTypeFilter: एग्ज़ैक्टmimeTypeस्ट्रिंग से मैच करता है (MimeTypeExtrasKeyकी जांच करता है).DeepLinkMatcher.actionFilter: यहactionस्ट्रिंग से एग्ज़ैक्ट मैच होने वाले यूआरएल दिखाता है. यहActionExtrasKeyकी जांच करता है.
इस तरीके से, अलग-अलग कार्रवाइयों के लिए एक ही यूआरआई पैटर्न का फिर से इस्तेमाल किया जा सकता है. जैसे, देखना बनाम बदलाव करना:
val viewFilter = DeepLinkMatcher.actionFilter(Intent.ACTION_VIEW) val editFilter = DeepLinkMatcher.actionFilter(Intent.ACTION_EDIT) val imageUriPattern = DeepLinkUri("www.example.com/image/{id}") val viewMatcher = UriDeepLinkMatcher(imageUriPattern, serializer<Gallery>(), filters = listOf(viewFilter)) val editMatcher = UriDeepLinkMatcher(imageUriPattern, serializer<Editor>(), filters = listOf(editFilter))
Filter एक फ़ंक्शनल (एसएएम) इंटरफ़ेस है. इसलिए, लैम्ब्डा एक्सप्रेशन का इस्तेमाल करके भी फ़िल्टर बनाए जा सकते हैं:
val myFilter = DeepLinkMatcher.Filter { request -> request.uri != null }
उपलब्ध मैचर का इस्तेमाल करना
लाइब्रेरी में तीन स्टैंडर्ड DeepLinkMatcher लागू करने के तरीके शामिल हैं:
StaticKeyDeepLinkMatcher, UriDeepLinkMatcher, और
BackStackMatcher. अगर ये मैचर आपके ऐप्लिकेशन की ज़रूरी शर्तों को पूरा नहीं करते हैं, तो कस्टम डीप लिंक मैचर बनाए जा सकते हैं.
बेसिक डीप लिंक मैच करना
ऐसे बेसिक डीप लिंक जिनमें आर्ग्युमेंट नहीं होते, उनके लिए StaticKeyDeepLinkMatcher का इस्तेमाल करें. इससे उन अनुरोधों को मैच किया जा सकेगा जो दिए गए सभी फ़िल्टर के मुताबिक हों.
उदाहरण के लिए, ACTION_APPLICATION_PREFERENCES के लिए इंटेंट मैनेज करने के लिए:
val preferencesActionFilter = DeepLinkMatcher.actionFilter(Intent.ACTION_APPLICATION_PREFERENCES) val preferencesActionDeepLinkMatcher = StaticKeyDeepLinkMatcher(PreferencesScreen, listOf(preferencesActionFilter))
यूआरआई डीप लिंक मैच करना
हायरारकी वाले यूआरआई को पैटर्न से मैच करने और आर्ग्युमेंट निकालने के लिए, UriDeepLinkMatcher का इस्तेमाल करें. उदाहरण के लिए, id आर्ग्युमेंट को डेस्टिनेशन कुंजी में निकालने के लिए, www.example.com/users/{id} से मैच किया जा सकता है. ज़्यादा जानकारी के लिए, यूआरआई डीप लिंक मैच करना लेख पढ़ें.
सिंथेटिक पिछली गतिविधियां बनाना
किसी सफल मैच के आधार पर सिंथेटिक पिछली गतिविधियां बनाने का तरीका तय करने के लिए, BackStackMatcher का इस्तेमाल करें. BackStackMatcher को सीधे इंस्टैंशिएट करने के बजाय, किसी दूसरे DeepLinkMatcher पर withBackStack एक्सटेंशन फ़ंक्शन को कॉल करें. withBackStack, रिसीवर को BackStackMatcher में रैप करता है. यह BackStackMatchResult दिखाता है, जिसमें सिंथेटिक पिछली गतिविधियां List शामिल होता है. ऐसा इसलिए, क्योंकि BackStackMatchResult, मैच के नतीजे के आधार पर तुलना करता है. इसलिए, withBackStack में मैचर को रैप करने से, मैच की ओरिजनल रैंकिंग बनी रहती है.
val homeMatcher = StaticKeyDeepLinkMatcher(HomeKey, listOf(DeepLinkMatcher.actionFilter(Intent.ACTION_VIEW))) val userListMatcher = UriDeepLinkMatcher( DeepLinkUri("www.example.com/users?page={page}"), serializer<UserListKey>() ).withBackStack { matchResult -> listOf(HomeKey, matchResult.key) } val userProfileMatcher = UriDeepLinkMatcher( DeepLinkUri("www.example.com/users/{id}"), serializer<UserProfileKey>() ).withBackStack { matchResult -> listOf(HomeKey, UserListKey(), matchResult.key) }
अपनी गतिविधि में पिछली गतिविधियों को मैनेज करने के लिए, आने वाले अनुरोध से मैच करें देखें.