Gelen DeepLinkRequest örneklerini uygulamanızın eski yığınına eklenebilecek anahtarlarla eşlemek için DeepLinkMatcher örnekleri 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, bir DeepLinkRequest alan ve istek eşleşirse DeepLinkMatcher.MatchResult, aksi takdirde null döndüren matchRequest yöntemini uygulamalıdır.
Birden fazla eşleştirici tek bir istekle eşleşebileceğinden MatchResult, sonuçları sıralamak ve en iyi eşleşmeyi seçmek için Comparable kullanır.
Tür parametreleri
DeepLinkMatcher sınıfı iki genel tür parametresi tanımlar:
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 parametresi olan R, kontrol edilmeyen alt türe dönüştürme işlemine gerek kalmadan özel eşleşme bilgilerini korur:
StaticKeyDeepLinkMatcher,RöğesiniDeepLinkMatcher.MatchResult<T>öğesine bağlar.UriDeepLinkMatcher,RöğesiniUriMatchResultöğesine bağlar ve ayrıştırılmış yol ile 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 eski yığın listesini korur.
Ön filtre istekleri
DeepLinkMatcher uygulamaları, istekleri değerlendirmeden önce filtrelemek için bir DeepLinkMatcher.Filter örnekleri listesi belirtebilir.
Kitaplıkta, yaygın olarak kullanılan filtreleri oluşturmak için yardımcı işlevler bulunur:
DeepLinkMatcher.mimeTypeFilter: TammimeTypedizelerine göre eşleşir (MimeTypeExtrasKeydeğerini kontrol eder).DeepLinkMatcher.actionFilter: Tamactiondizelerine göre 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 filtre 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 gereksinimlerini karşılamıyorsa özel derin bağlantı eşleştiriciler oluşturabilirsiniz.
Temel derin bağlantıları eşleştirme
Ayıklanacak bağımsız değişkenleri olmayan temel derin bağlantılarda, sağlanan tüm filtreleri karşılayan eşleşen istekleri eşleştirmek için StaticKeyDeepLinkMatcher kullanın.
Örneğin, ACTION_APPLICATION_PREFERENCES ile ilgili amaçları işlemek için:
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'ları kalıplarla eşleştirmek ve bağımsız değişkenleri ayıklamak için UriDeepLinkMatcher kullanın. Örneğin, id bağımsız değişkenini bir hedef anahtara ayıklamak için www.example.com/users/{id} ile eşleştirebilirsiniz. Daha fazla bilgi için URI derin bağlantılarını eşleştirme başlıklı makaleyi inceleyin.
Sentetik bir eski yığın oluşturma
Başarılı bir eşleşmeden sentetik bir eski yığının nasıl oluşturulacağını tanımlamak için BackStackMatcher kullanın. BackStackMatcher sınıfını doğrudan örneklendirmek yerine başka bir DeepLinkMatcher üzerinde withBackStack uzantı işlevini çağırın. withBackStack, alıcıyı yapay bir eski yığın List içeren BackStackMatchResult döndüren bir BackStackMatcher içine sarmalar. 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 eski yığını işlemek için Gelen isteği eşleştirme bölümüne bakın.