수신되는 DeepLinkRequest 인스턴스를 앱의 백 스택에 추가할 수 있는 키에 매핑하려면 DeepLinkMatcher 인스턴스를 정의합니다.
DeepLinkMatcher는 match 및 matchRequest의 두 가지 메서드를 포함하는 추상 클래스입니다. 서브클래스는 matchRequest를 구현해야 합니다. 이 메서드는 DeepLinkRequest를 사용하고 요청이 일치하면 DeepLinkMatcher.MatchResult를 반환하고 그렇지 않으면 null를 반환합니다.
여러 일치자가 단일 요청과 일치할 수 있으므로 MatchResult는 Comparable를 구현하여 결과의 순위를 매기고 가장 일치하는 항목을 선택합니다.
유형 매개변수
DeepLinkMatcher 클래스는 두 가지 일반 유형 매개변수 DeepLinkMatcher<T : Any, R : DeepLinkMatcher.MatchResult<T>>를 선언합니다.
T : Any: 딥 링크가 일치할 때 반환되는 대상 탐색 키 유형 (예:UserProfileKey또는NavKey)입니다.R : DeepLinkMatcher.MatchResult<T>:matchRequest및match에서 반환하는 특정MatchResult하위 유형입니다.
두 번째 유형 매개변수 R는 확인되지 않은 다운캐스팅을 요구하지 않고 특수 일치 정보를 보존합니다.
StaticKeyDeepLinkMatcher는R를DeepLinkMatcher.MatchResult<T>에 바인딩합니다.UriDeepLinkMatcher는R를UriMatchResult에 바인딩하여 파싱된 경로 및 쿼리 인수를 패턴 일치 점수와 함께 유지합니다.BackStackMatcher는R를BackStackMatchResult에 바인딩하여withBackStack에서 구성한 합성 백 스택 목록을 유지합니다.
사전 필터링 요청
DeepLinkMatcher 구현은 DeepLinkMatcher.Filter 인스턴스 목록을 지정하여 요청을 평가하기 전에 필터링할 수 있습니다.
라이브러리에는 일반 필터를 만드는 도우미 함수가 포함되어 있습니다.
DeepLinkMatcher.mimeTypeFilter: 정확한mimeType문자열로 일치합니다 (MimeTypeExtrasKey확인).DeepLinkMatcher.actionFilter: 정확한action문자열로 일치합니다 (ActionExtrasKey확인).
이 접근 방식을 사용하면 보기와 수정과 같은 다양한 작업에 동일한 URI 패턴을 재사용할 수 있습니다.
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는 기능 (SAM) 인터페이스이므로 람다 표현식을 사용하여 필터를 만들 수도 있습니다.
val myFilter = DeepLinkMatcher.Filter { request -> request.uri != null }
제공된 매처 사용
라이브러리에는 StaticKeyDeepLinkMatcher, UriDeepLinkMatcher, BackStackMatcher 등 세 가지 표준 DeepLinkMatcher 구현이 포함되어 있습니다. 이러한 일치자가 앱의 요구사항을 충족하지 않는 경우 맞춤 딥 링크 일치자를 만들 수 있습니다.
기본 딥 링크 일치
추출할 인수가 없는 기본 딥 링크의 경우 StaticKeyDeepLinkMatcher를 사용하여 제공된 모든 필터를 충족하는 요청을 일치시킵니다.
예를 들어 ACTION_APPLICATION_PREFERENCES의 인텐트를 처리하려면 다음을 실행합니다.
val preferencesActionFilter = DeepLinkMatcher.actionFilter(Intent.ACTION_APPLICATION_PREFERENCES) val preferencesActionDeepLinkMatcher = StaticKeyDeepLinkMatcher(PreferencesScreen, listOf(preferencesActionFilter))
URI 딥 링크 일치
계층식 URI를 패턴과 일치시키고 인수를 추출하려면 UriDeepLinkMatcher를 사용합니다. 예를 들어 www.example.com/users/{id}를 일치시켜 id 인수를 대상 키로 추출할 수 있습니다. 자세한 내용은 URI 딥 링크 일치를 참고하세요.
합성 백 스택 빌드
일치하는 항목에서 합성 백 스택을 빌드하는 방법을 정의하려면 BackStackMatcher를 사용합니다. BackStackMatcher를 직접 인스턴스화하는 대신 다른 DeepLinkMatcher에서 withBackStack 확장 함수를 호출합니다. withBackStack는 수신자를 BackStackMatcher로 래핑하여 합성 백 스택 List가 포함된 BackStackMatchResult를 반환합니다. BackStackMatchResult는 기본 일치 결과에 비교를 위임하므로 일치자를 withBackStack로 래핑하면 원래 일치 순위가 유지됩니다.
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) }
활동에서 결과 백 스택을 처리하려면 수신 요청 일치를 참고하세요.