لربط مثيلات 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، بمعلومات المطابقة المتخصّصة بدون الحاجة إلى تحويل النوع إلى نوع فرعي غير محدّد:
- يربط
StaticKeyDeepLinkMatcherRبـDeepLinkMatcher.MatchResult<T>. - يربط
UriDeepLinkMatcherالسلسلةRبالسلسلةUriMatchResult، مع الاحتفاظ بالمسار الذي تم تحليله ووسيطات طلب البحث إلى جانب نتائج المطابقة مع النمط. - يربط
BackStackMatcherRبـ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 هي واجهة وظيفية (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)
لمطابقة معرّفات الموارد المنتظمة الهرمية مع الأنماط واستخراج الوسيطات، استخدِم 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) }
للتعامل مع حزمة الخلفية الناتجة في نشاطك، راجِع مطابقة طلب وارد.