لربط مثيلات 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>: النوع الفرعي المحدّد لـMatchResultالذي تعرضه السمتانmatchRequestوmatch.
تحتفظ مَعلمة النوع الثانية، R، بمعلومات المطابقة المتخصّصة بدون
الحاجة إلى تحويل النوع إلى نوع فرعي غير محدّد:
- يربط
StaticKeyDeepLinkMatcherبينRوDeepLinkMatcher.MatchResult<T>. - يربط
UriDeepLinkMatcherالسمةRبـUriMatchResult، مع الاحتفاظ بالمسار الذي تم تحليله ووسيطات طلب البحث إلى جانب نتائج مطابقة الأنماط. - يربط
BackStackMatcherالسمةRبالسمة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)، يمكنك أيضًا إنشاء فلاتر
باستخدام تعبيرات lambda:
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
مباشرةً، يمكنك استدعاء دالة الإضافة withBackStack على
DeepLinkMatcher آخر. تُغلِّف الدالة 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) }
للتعامل مع الأنشطة السابقة الناتجة عن نشاطك، يُرجى الاطّلاع على مطابقة طلب وارد.