Untuk memetakan instance DeepLinkRequest yang masuk ke kunci yang dapat ditambahkan ke
data sebelumnya aplikasi, Anda menentukan instance DeepLinkMatcher.
DeepLinkMatcher adalah class abstrak yang mencakup dua metode, match
dan matchRequest. Subclass harus menerapkan matchRequest, yang menggunakan
DeepLinkRequest dan menampilkan DeepLinkMatcher.MatchResult jika
permintaan cocok, atau null jika tidak.
Karena beberapa pencocok mungkin cocok dengan satu permintaan, MatchResult menerapkan
Comparable untuk memberi peringkat hasil dan memilih kecocokan terbaik.
Parameter jenis
Class DeepLinkMatcher mendeklarasikan dua parameter jenis generik:
DeepLinkMatcher<T : Any, R : DeepLinkMatcher.MatchResult<T>>.
T : Any: Jenis kunci navigasi tujuan (sepertiUserProfileKeyatauNavKey) yang ditampilkan saat deep link cocok.R : DeepLinkMatcher.MatchResult<T>: SubjenisMatchResulttertentu yang ditampilkan olehmatchRequestdanmatch.
Parameter jenis kedua, R, mempertahankan informasi pencocokan khusus tanpa
memerlukan downcasting yang tidak dicentang:
StaticKeyDeepLinkMatchermengikatRkeDeepLinkMatcher.MatchResult<T>.UriDeepLinkMatchermengikatRkeUriMatchResult, mempertahankan argumen jalur dan kueri yang diuraikan bersama dengan skor pencocokan pola.BackStackMatchermengikatRkeBackStackMatchResult, dengan mempertahankan daftar data sintetis sebelumnya yang dibuat olehwithBackStack.
Permintaan pra-filter
Implementasi DeepLinkMatcher dapat menentukan daftar instance DeepLinkMatcher.Filter untuk memfilter permintaan sebelum mengevaluasinya.
Library ini menyertakan fungsi bantuan untuk membuat filter umum:
DeepLinkMatcher.mimeTypeFilter: Mencocokkan stringmimeTypeyang sama persis (memeriksaMimeTypeExtrasKey).DeepLinkMatcher.actionFilter: Cocok dengan stringactionyang sama persis (memeriksaActionExtrasKey).
Dengan pendekatan ini, Anda dapat menggunakan kembali pola URI yang sama untuk berbagai tindakan, seperti melihat versus mengedit:
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))
Karena Filter adalah antarmuka fungsional (SAM), Anda juga dapat membuat filter
menggunakan ekspresi lambda:
val myFilter = DeepLinkMatcher.Filter { request -> request.uri != null }
Menggunakan matcher yang disediakan
Library ini mencakup tiga implementasi DeepLinkMatcher standar:
StaticKeyDeepLinkMatcher, UriDeepLinkMatcher, dan
BackStackMatcher. Jika pencocok ini tidak memenuhi persyaratan aplikasi,
Anda dapat membuat pencocok deep link kustom.
Mencocokkan deep link dasar
Untuk deep link dasar yang tidak memiliki argumen untuk diekstrak, gunakan
StaticKeyDeepLinkMatcher untuk mencocokkan permintaan yang memenuhi semua
filter yang disediakan.
Misalnya, untuk menangani intent untuk ACTION_APPLICATION_PREFERENCES:
val preferencesActionFilter = DeepLinkMatcher.actionFilter(Intent.ACTION_APPLICATION_PREFERENCES) val preferencesActionDeepLinkMatcher = StaticKeyDeepLinkMatcher(PreferencesScreen, listOf(preferencesActionFilter))
Mencocokkan deep link URI
Untuk mencocokkan URI hierarkis dengan pola dan mengekstrak argumen, gunakan
UriDeepLinkMatcher. Misalnya, Anda dapat mencocokkan www.example.com/users/{id} untuk
mengekstrak argumen id ke dalam kunci tujuan. Untuk informasi selengkapnya, lihat
Mencocokkan deep link URI.
Membuat data sebelumnya sintetis
Untuk menentukan cara membuat data sebelumnya sintetis dari kecocokan yang berhasil, gunakan
BackStackMatcher. Daripada membuat instance BackStackMatcher
secara langsung, panggil fungsi ekstensi withBackStack di
DeepLinkMatcher lain. withBackStack menggabungkan penerima dalam BackStackMatcher
yang menampilkan BackStackMatchResult yang berisi data sebelumnya sintetis
List. Karena BackStackMatchResult mendelegasikan perbandingan ke hasil pencocokan yang mendasarinya, menggabungkan pencocok dalam withBackStack akan mempertahankan peringkat pencocokan aslinya.
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) }
Untuk menangani data sebelumnya yang dihasilkan dalam aktivitas Anda, lihat Mencocokkan permintaan masuk.