Untuk memetakan instance DeepLinkRequest yang masuk ke kunci yang dapat ditambahkan ke
tumpukan kembali aplikasi Anda, 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 dapat mencocokkan satu permintaan, MatchResult menerapkan
Comparable untuk memberi peringkat pada hasil dan memilih kecocokan terbaik.
Parameter jenis
Class DeepLinkMatcher mendeklarasikan dua parameter jenis generik:
DeepLinkMatcher<T : Any, R : DeepLinkMatcher.MatchResult<T>>.
T : Any: Jenis tombol navigasi tujuan (sepertiUserProfileKeyatauNavKey) yang ditampilkan saat deep link cocok.R : DeepLinkMatcher.MatchResult<T>: SubjenisMatchResulttertentu yang ditampilkan olehmatchRequestdanmatch.
Parameter jenis kedua, R, mempertahankan informasi kecocokan khusus tanpa
memerlukan downcasting yang tidak diperiksa:
StaticKeyDeepLinkMatchermengikatRkeDeepLinkMatcher.MatchResult<T>.UriDeepLinkMatchermengikatRkeUriMatchResult, dengan mempertahankan argumen kueri dan jalur yang diuraikan bersama skor pencocokan pola.BackStackMatchermengikatRkeBackStackMatchResult, mempertahankan daftar data sebelumnya sintetis 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 dengan stringmimeTypepersis (memeriksaMimeTypeExtrasKey).DeepLinkMatcher.actionFilter: Mencocokkan dengan stringactionpersis (memeriksaActionExtrasKey).
Dengan pendekatan ini, Anda dapat menggunakan kembali pola URI yang sama untuk tindakan yang berbeda, 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 pencocok yang disediakan
Library ini mencakup tiga implementasi DeepLinkMatcher standar:
StaticKeyDeepLinkMatcher, UriDeepLinkMatcher, dan
BackStackMatcher. Jika pencocok ini tidak memenuhi persyaratan aplikasi Anda,
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 diberikan.
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 mengetahui informasi selengkapnya, lihat artikel
Mencocokkan deep link URI.
Membangun back stack sintetis
Untuk menentukan cara membuat tumpukan kembali sintetis dari kecocokan yang berhasil, gunakan
BackStackMatcher. Daripada membuat instance BackStackMatcher
secara langsung, panggil fungsi ekstensi withBackStack di
DeepLinkMatcher lain. withBackStack membungkus penerima dalam BackStackMatcher
yang menampilkan BackStackMatchResult yang berisi data sebelumnya sintetis
List. Karena BackStackMatchResult mendelegasikan perbandingan ke hasil kecocokan
yang mendasarinya, membungkus pencocok dalam withBackStack akan mempertahankan peringkat
kecocokan 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 di aktivitas Anda, lihat Mencocokkan permintaan masuk.