आने वाले 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 का इस्तेमाल करें. उदाहरण के लिए, www.example.com/users/{id} को मैच करके, 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) }
अपनी गतिविधि में बैक स्टैक को मैनेज करने के लिए, आने वाले अनुरोध से मेल खाना लेख पढ़ें.