Um eingehende DeepLinkRequest-Instanzen Schlüsseln zuzuordnen, die dem
Back-Stack Ihrer App hinzugefügt werden können, definieren Sie DeepLinkMatcher-Instanzen.
DeepLinkMatcher ist eine abstrakte Klasse, die zwei Methoden enthält: match
und matchRequest. Unterklassen müssen matchRequest implementieren, das ein
DeepLinkRequest akzeptiert und ein DeepLinkMatcher.MatchResult zurückgibt, wenn die
Anfrage übereinstimmt, andernfalls null.
Da mehrere Matcher mit einer einzelnen Anfrage übereinstimmen können, MatchResult implementiert
Comparable, um Ergebnisse zu bewerten und die beste Übereinstimmung auszuwählen.
Typparameter
Die DeepLinkMatcher Klasse deklariert zwei generische Typparameter:
DeepLinkMatcher<T : Any, R : DeepLinkMatcher.MatchResult<T>>.
T : Any: Der Typ des Zielnavigationsschlüssels (z. B.UserProfileKeyoderNavKey), der zurückgegeben wird, wenn der Deeplink übereinstimmt.R : DeepLinkMatcher.MatchResult<T>: Der spezifischeMatchResult-Untertyp, der vonmatchRequestundmatchzurückgegeben wird.
Der zweite Typparameter, R, behält spezielle Übereinstimmungsinformationen bei, ohne dass eine nicht überprüfte Typumwandlung erforderlich ist:
StaticKeyDeepLinkMatcherbindetRanDeepLinkMatcher.MatchResult<T>.UriDeepLinkMatcherbindetRanUriMatchResultund behält geparste Pfad- und Abfrageargumente sowie Musterabgleichsergebnisse bei.BackStackMatcherbindetRanBackStackMatchResultund behält die synthetische Back-Stack-Liste bei, die vonwithBackStackerstellt wurde.
Anfragen vorfiltern
DeepLinkMatcher Implementierungen können eine Liste von
DeepLinkMatcher.Filter-Instanzen angeben, um Anfragen zu filtern, bevor
sie ausgewertet werden.
Die Bibliothek enthält Hilfsfunktionen zum Erstellen allgemeiner Filter:
DeepLinkMatcher.mimeTypeFilter: Stimmt mit genauenmimeTypeStrings überein (prüftMimeTypeExtrasKey).DeepLinkMatcher.actionFilter: Stimmt mit genauenactionStrings überein (prüftActionExtrasKey).
Mit diesem Ansatz können Sie dasselbe URI-Muster für verschiedene Aktionen verwenden, z. B. zum Ansehen und Bearbeiten:
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))
Da Filter eine funktionale (SAM-)Schnittstelle ist, können Sie auch Filter mit Lambda-Ausdrücken erstellen:
val myFilter = DeepLinkMatcher.Filter { request -> request.uri != null }
Bereitgestellte Matcher verwenden
Die Bibliothek enthält drei StandardDeepLinkMatcherimplementierungen:
StaticKeyDeepLinkMatcher, UriDeepLinkMatcher und
BackStackMatcher. Wenn diese Matcher die Anforderungen Ihrer App nicht erfüllen,
können Sie benutzerdefinierte Deeplink-Matcher erstellen.
Einfache Deeplinks abgleichen
Verwenden Sie für einfache Deeplinks ohne zu extrahierende Argumente
StaticKeyDeepLinkMatcher, um Anfragen abzugleichen, die alle
angegebenen Filter erfüllen.
So verarbeiten Sie beispielsweise Intents für ACTION_APPLICATION_PREFERENCES:
val preferencesActionFilter = DeepLinkMatcher.actionFilter(Intent.ACTION_APPLICATION_PREFERENCES) val preferencesActionDeepLinkMatcher = StaticKeyDeepLinkMatcher(PreferencesScreen, listOf(preferencesActionFilter))
URI-Deeplinks abgleichen
Verwenden Sie UriDeepLinkMatcher, um hierarchische URIs mit Mustern abzugleichen und Argumente zu extrahieren. Sie können beispielsweise www.example.com/users/{id} abgleichen, um
das id Argument in einen Zielschlüssel zu extrahieren. Weitere Informationen finden Sie unter
URI-Deeplinks abgleichen.
Synthetischen Back-Stack erstellen
Mit
BackStackMatcher können Sie definieren, wie ein synthetischer Back-Stack aus einer erfolgreichen Übereinstimmung erstellt wird. Rufen Sie die withBackStack Erweiterungsfunktion für einen anderen
DeepLinkMatcher auf, anstatt BackStackMatcher
direkt zu instanziieren. withBackStack umschließt den Empfänger in einem BackStackMatcher
das ein BackStackMatchResult mit einer synthetischen Back-Stack
List zurückgibt. Da BackStackMatchResult den Vergleich an das zugrunde liegende Übereinstimmungsergebnis delegiert, bleibt die ursprüngliche Übereinstimmungsbewertung erhalten, wenn ein Matcher in withBackStack umschlossen wird.
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) }
Informationen zum Verarbeiten des resultierenden Back-Stacks in Ihrer Aktivität finden Sie unter Eingehende Anfrage abgleichen.