برای نگاشت نمونههای ورودی DeepLinkRequest به کلیدهایی که میتوانند به back stack برنامه شما اضافه شوند، نمونههای 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>: زیرنوع خاصMatchResultکه توسطmatchRequestوmatchبرگردانده میشود.
پارامتر نوع دوم، R ، اطلاعات تطبیق تخصصی را بدون نیاز به downcasting بدون کنترل حفظ میکند:
-
StaticKeyDeepLinkMatcherRرا بهDeepLinkMatcher.MatchResult<T>متصل میکند. -
UriDeepLinkMatcher،Rبه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 برای مطابقت با درخواستهایی که تمام فیلترهای ارائه شده را برآورده میکنند، استفاده کنید.
برای مثال، برای مدیریت intentها برای 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 را در یک کلید مقصد استخراج کنید. برای اطلاعات بیشتر، به Match URI deep links مراجعه کنید.
یک پشته مصنوعی بسازید
برای تعریف نحوه ساخت یک backstack مصنوعی از یک تطابق موفق، از BackStackMatcher استفاده کنید. به جای نمونهسازی مستقیم BackStackMatcher ، تابع افزونه withBackStack را در DeepLinkMatcher دیگری فراخوانی کنید. withBackStack گیرنده را در یک BackStackMatcher قرار میدهد که یک BackStackMatchResult حاوی یک List backstack مصنوعی را برمیگرداند. از آنجا که BackStackMatchResult مقایسه با نتیجه تطابق زیرین را محول میکند، قرار دادن یک matcher در 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) }
برای مدیریت پشته برگشتی حاصل در فعالیت خود، به Match an incoming request مراجعه کنید.