수신 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 }
제공된 일치자 사용
라이브러리에는 세 가지 표준 DeepLinkMatcher 구현이 포함되어 있습니다.
StaticKeyDeepLinkMatcher, UriDeepLinkMatcher, 및
BackStackMatcher. 이러한 일치자가 앱의 요구사항을 충족하지 않는 경우
맞춤 딥 링크 일치자를 만들 수 있습니다.
기본 딥 링크 일치
추출할 인수가 없는 기본 딥 링크의 경우
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은 합성 백 스택
List이 포함된 BackStackMatchResult를 반환하는 BackStackMatcher
에서 수신자를 래핑합니다. 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) }
활동에서 결과 백 스택을 처리하려면 수신 요청 일치를 참고하세요.