Criar instâncias DeepLinkMatcher

Para mapear instâncias de DeepLinkRequest recebidas para chaves que podem ser adicionadas à backstack do app, defina instâncias de DeepLinkMatcher.

DeepLinkMatcher é uma classe abstrata que inclui dois métodos, match e matchRequest. As subclasses precisam implementar matchRequest, que usa um DeepLinkRequest e retorna um DeepLinkMatcher.MatchResult se a solicitação corresponder ou null caso contrário.

Como vários correspondentes podem corresponder a uma única solicitação, MatchResult implementa Comparable para classificar os resultados e selecionar a melhor correspondência.

Parâmetros de tipo

A classe DeepLinkMatcher declara dois parâmetros de tipo genérico: DeepLinkMatcher<T : Any, R : DeepLinkMatcher.MatchResult<T>>.

  • T : Any: o tipo de chave de navegação de destino (como UserProfileKey ou NavKey) retornado quando o link direto corresponde.
  • R : DeepLinkMatcher.MatchResult<T>: o subtipo MatchResult específico retornado por matchRequest e match.

O segundo parâmetro de tipo, R, preserva informações de correspondência especializadas sem exigir downcasting não verificado:

Solicitações de pré-filtragem

As implementações de DeepLinkMatcher podem especificar uma lista de instâncias de DeepLinkMatcher.Filter para filtrar as solicitações antes de avaliá-las.

A biblioteca inclui funções auxiliares para criar filtros comuns:

Essa abordagem permite reutilizar o mesmo padrão de URI para ações diferentes, como visualização e edição:

Como Filter é uma interface funcional (SAM), também é possível criar filtros usando expressões lambda:

Usar os comparadores fornecidos

A biblioteca inclui três implementações padrão de DeepLinkMatcher: StaticKeyDeepLinkMatcher, UriDeepLinkMatcher e BackStackMatcher. Se esses correspondentes não atenderem aos requisitos do seu app, crie correspondentes de link direto personalizados.

Para links diretos básicos que não têm argumentos para extrair, use StaticKeyDeepLinkMatcher para corresponder às solicitações que atendem a todos os filtros fornecidos.

Por exemplo, para processar intents de ACTION_APPLICATION_PREFERENCES:

Para comparar URIs hierárquicos com padrões e extrair argumentos, use UriDeepLinkMatcher. Por exemplo, é possível usar www.example.com/users/{id} para extrair o argumento id em uma chave de destino. Para mais informações, consulte Corresponder links diretos de URI.

Criar uma backstack sintética

Para definir como criar uma backstack sintética com base em uma correspondência, use BackStackMatcher. Em vez de instanciar BackStackMatcher diretamente, chame a função de extensão withBackStack em outro DeepLinkMatcher. withBackStack une o receptor em um BackStackMatcher que retorna um BackStackMatchResult que contém uma backstack sintética List. Como BackStackMatchResult delega a comparação ao resultado de correspondência subjacente, o encapsulamento de um matcher em withBackStack preserva a classificação de correspondência original.

Para processar a backstack resultante na sua atividade, consulte Corresponder a uma solicitação recebida.