Gelen DeepLinkRequest örneklerini, uygulamanızın geri yığınına eklenebilecek anahtarlarla eşlemek için DeepLinkMatcher örneklerini tanımlarsınız.
DeepLinkMatcher, match ve matchRequest olmak üzere iki yöntem içeren soyut bir sınıftır. Alt sınıflar, matchRequest işlevini uygulamalıdır. Bu işlev, DeepLinkRequest alır ve istek eşleşirse DeepLinkMatcher.MatchResult, aksi takdirde null döndürür.
Tek bir istek birden fazla eşleştiriciyle eşleşebileceğinden MatchResult, sonuçları sıralamak ve en iyi eşleşmeyi seçmek için Comparable uygular.
Tür parametreleri
DeepLinkMatcher sınıfı iki genel tür parametresi bildirir:
DeepLinkMatcher<T : Any, R : DeepLinkMatcher.MatchResult<T>>.
T : Any: Derin bağlantı eşleştiğinde döndürülen hedef gezinme anahtarı türü (ör.UserProfileKeyveyaNavKey).R : DeepLinkMatcher.MatchResult<T>:matchRequestvematchtarafından döndürülen belirliMatchResultalt türü.
İkinci tür parametre olan R, uzmanlaşmış eşleşme bilgilerini, tür dönüştürme kontrolü gerektirmeden korur:
StaticKeyDeepLinkMatcher,RöğesiniDeepLinkMatcher.MatchResult<T>öğesine bağlar.UriDeepLinkMatcher,RdeğeriniUriMatchResultile bağlar. Bu işlem, ayrıştırılan yolu ve sorgu bağımsız değişkenlerini, kalıp eşleştirme puanlarıyla birlikte korur.BackStackMatcher,RöğesiniBackStackMatchResultöğesine bağlar vewithBackStacktarafından oluşturulan yapay geri yığın listesini korur.
Ön filtreleme istekleri
DeepLinkMatcher uygulamaları, istekleri değerlendirmeden önce filtrelemek için bir DeepLinkMatcher.Filter örnekleri listesi belirtebilir.
Kitaplıkta, yaygın filtreler oluşturmaya yardımcı olacak işlevler bulunur:
DeepLinkMatcher.mimeTypeFilter: TammimeTypedizeleriyle eşleşir (MimeTypeExtrasKeykontrol edilir).DeepLinkMatcher.actionFilter: Tamactiondizeleriyle eşleşir (ActionExtrasKeykontrol edilir).
Bu yaklaşım, görüntüleme ve düzenleme gibi farklı işlemler için aynı URI kalıbını yeniden kullanmanıza olanak tanır:
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 işlevsel (SAM) bir arayüz olduğundan lambda ifadelerini kullanarak da filtreler oluşturabilirsiniz:
val myFilter = DeepLinkMatcher.Filter { request -> request.uri != null }
Sağlanan eşleştiricileri kullanma
Kitaplıkta üç standart DeepLinkMatcher uygulaması bulunur: StaticKeyDeepLinkMatcher, UriDeepLinkMatcher ve BackStackMatcher. Bu eşleştiriciler uygulamanızın koşullarını karşılamıyorsa özel derin bağlantı eşleştiricileri oluşturabilirsiniz.
Temel derin bağlantıları eşleştirme
Çıkarılacak bağımsız değişkenleri olmayan temel derin bağlantılar için, sağlanan tüm filtreleri karşılayan isteklerle eşleşmek üzere StaticKeyDeepLinkMatcher kullanın.
Örneğin, ACTION_APPLICATION_PREFERENCES için niyetleri işlemek üzere:
val preferencesActionFilter = DeepLinkMatcher.actionFilter(Intent.ACTION_APPLICATION_PREFERENCES) val preferencesActionDeepLinkMatcher = StaticKeyDeepLinkMatcher(PreferencesScreen, listOf(preferencesActionFilter))
URI derin bağlantılarını eşleştirme
Hiyerarşik URI'leri kalıplarla eşleştirmek ve bağımsız değişkenleri ayıklamak için UriDeepLinkMatcher kullanın. Örneğin, www.example.com/users/{id} ile eşleşerek id bağımsız değişkenini hedef anahtara çıkarabilirsiniz. Daha fazla bilgi için URI derin bağlantılarını eşleştirme başlıklı makaleyi inceleyin.
Sentetik bir geri yığın oluşturma
Başarılı bir eşleşmeden nasıl yapay bir eski yığın oluşturulacağını tanımlamak için BackStackMatcher kullanın. BackStackMatcher
öğesini doğrudan oluşturmak yerine başka bir DeepLinkMatcher üzerinde withBackStack uzantı işlevini çağırın. withBackStack, alıcıyı BackStackMatcher içine sarar ve yapay bir geri yığın içeren BackStackMatchResult döndürür
List. BackStackMatchResult, karşılaştırmayı temel eşleşme sonucuna devrettiğinden, bir eşleştiriciyi withBackStack ile sarmalamak orijinal eşleşme sıralamasını korur.
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) }
Etkinliğinizde ortaya çıkan geri yığınıyla ilgili işlem yapmak için Gelen isteği eşleştirme başlıklı makaleyi inceleyin.