আপনার অ্যাপের ব্যাক স্ট্যাকে যোগ করা যায় এমন কী-গুলোর সাথে আগত 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 , আনচেকড ডাউনকাস্টিং-এর প্রয়োজন ছাড়াই বিশেষায়িত ম্যাচ তথ্য সংরক্ষণ করে:
-
StaticKeyDeepLinkMatcherRকেDeepLinkMatcher.MatchResult<T>-এর সাথে সংযুক্ত করে। -
UriDeepLinkMatcher,RকেUriMatchResultসাথে সংযুক্ত করে এবং প্যাটার্ন-ম্যাচিং স্কোরের পাশাপাশি পার্স করা পাথ ও কোয়েরি আর্গুমেন্টগুলোও সংরক্ষণ করে। -
BackStackMatcher,withBackStackদ্বারা নির্মিত সিন্থেটিক ব্যাক স্ট্যাক তালিকাটিকে অক্ষুণ্ণ রেখে,RকেBackStackMatchResultএর সাথে আবদ্ধ করে।
প্রি-ফিল্টার অনুরোধ
DeepLinkMatcher ইমপ্লিমেন্টেশনগুলো অনুরোধগুলো মূল্যায়ন করার আগে সেগুলোকে ফিল্টার করার জন্য DeepLinkMatcher.Filter ইনস্ট্যান্সের একটি তালিকা নির্দিষ্ট করতে পারে।
লাইব্রেরিতে সাধারণ ফিল্টার তৈরি করার জন্য সহায়ক ফাংশন অন্তর্ভুক্ত রয়েছে:
-
DeepLinkMatcher.mimeTypeFilter: সঠিকmimeTypeস্ট্রিং দ্বারা মেলায় (MimeTypeExtrasKeyযাচাই করে)। -
DeepLinkMatcher.actionFilter: হুবহুactionস্ট্রিং দ্বারা মেলায় (ActionExtrasKeyযাচাই করে)।
এই পদ্ধতিটি আপনাকে বিভিন্ন কাজের জন্য, যেমন দেখা বনাম সম্পাদনা করার জন্য, একই URI প্যাটার্ন পুনরায় ব্যবহার করার সুযোগ দেয়:
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 একটি ফাংশনাল (SAM) ইন্টারফেস, তাই আপনি ল্যাম্বডা এক্সপ্রেশন ব্যবহার করেও ফিল্টার তৈরি করতে পারেন:
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))
URI ডিপ লিঙ্কগুলি মেলান
প্যাটার্নের সাথে হায়ারারকিক্যাল ইউআরআই মেলানোর জন্য এবং আর্গুমেন্ট বের করার জন্য, 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) }
আপনার অ্যাক্টিভিটিতে সৃষ্ট ব্যাক স্ট্যাক পরিচালনা করতে, ‘একটি আগত অনুরোধ মেলানো’ দেখুন।