আপনার অ্যাপের ব্যাক স্ট্যাকে যোগ করা যায় এমন কী-তে ইনকামিং DeepLinkRequest ইনস্ট্যান্স ম্যাপ করতে, আপনি DeepLinkMatcher ইনস্ট্যান্স নির্ধারণ করেন।
DeepLinkMatcher হল একটি অ্যাবস্ট্রাক্ট ক্লাস যার মধ্যে দুটি পদ্ধতি রয়েছে, match
এবং matchRequest. সাবক্লাসকে অবশ্যই matchRequest প্রয়োগ করতে হবে, যা একটি
DeepLinkRequest নেয় এবং যদি
অনুরোধটি ম্যাচ করে তাহলে DeepLinkMatcher.MatchResult রিটার্ন করে, অন্যথায় null রিটার্ন করে।
একাধিক ম্যাচিং কোয়েরি একটি অনুরোধের সাথে ম্যাচ করতে পারে, তাই ফলাফল র্যাঙ্ক করতে এবং সবচেয়ে ভালো ম্যাচ বেছে নিতে MatchResultComparable
প্রয়োগ করে।
টাইপ প্যারামিটার
DeepLinkMatcher ক্লাসে দুটি জেনেরিক টাইপ প্যারামিটার ঘোষণা করা হয়েছে:
DeepLinkMatcher<T : Any, R : DeepLinkMatcher.MatchResult<T>>।
T : Any: ডিপ লিঙ্ক ম্যাচ করলে গন্তব্যের নেভিগেশন কীয়ের ধরন (যেমনUserProfileKeyবাNavKey) রিটার্ন করা হয়।R : DeepLinkMatcher.MatchResult<T>:matchRequestওmatch-এর দ্বারা রিটার্ন করা নির্দিষ্টMatchResultসাবটাইপ।
দ্বিতীয় ধরনের প্যারামিটার, R, বিশেষ ম্যাচ সংক্রান্ত তথ্যকে অক্ষুণ্ণ রাখে, এর জন্য
আনচেকড ডাউনকাস্টিংয়ের প্রয়োজন হয় না:
StaticKeyDeepLinkMatcherR-কেDeepLinkMatcher.MatchResult<T>-এর সাথে বাইন্ড করে।UriDeepLinkMatcherR-কেUriMatchResult-এর সাথে বাইন্ড করে, এর ফলে পার্স করা পাথ ও কোয়েরি আর্গুমেন্ট এবং প্যাটার্ন-ম্যাচিং স্কোর বজায় থাকে।BackStackMatcherR-কেBackStackMatchResult-এর সাথে বাইন্ড করে,withBackStack-এর তৈরি করা সিন্থেটিক ব্যাক স্ট্যাক তালিকা ধরে রাখে।
প্রি-ফিল্টার অনুরোধ
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 ডিপ লিঙ্ক ম্যাচ করা
প্যাটার্নের সাথে মিলে যাওয়া হায়ারার্কিক্যাল URI-এর জন্য এবং আর্গুমেন্ট এক্সট্র্যাক্ট করতে, UriDeepLinkMatcher ব্যবহার করুন। যেমন, আপনি www.example.com/users/{id}-এর সাথে ম্যাচ করে
id আর্গুমেন্টটি ডেস্টিনেশন কী-তে এক্সট্র্যাক্ট করতে পারেন। আরও তথ্যের জন্য, URI ডিপ লিঙ্ক ম্যাচ করা দেখুন।
সিন্থেটিক ব্যাক স্ট্যাক তৈরি করা
সফল ম্যাচ থেকে কীভাবে সিন্থেটিক ব্যাক স্ট্যাক তৈরি করতে হয় তা নির্ধারণ করতে, 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) }
আপনার অ্যাক্টিভিটিতে ফলাফল হিসেবে প্রাপ্ত ব্যাক স্ট্যাক ম্যানেজ করতে, ইনকামিং অনুরোধ ম্যাচ করুন দেখুন।