Cómo admitir vínculos directos

A partir de la versión 1.2.0, Navigation 3 admite la vinculación directa a destinos de tu app con las clases DeepLinkRequest y DeepLinkMatcher.

Para admitir vínculos directos en tu app, completa los siguientes pasos:

  1. Define filtros de intents en tu AndroidManifest.xml para especificar qué URIs puede controlar tu app.
  2. Crea instancias de DeepLinkMatcher para asignar solicitudes entrantes a tus claves de navegación.
  3. Haz coincidir las solicitudes entrantes en el método onCreate o onNewIntent de tu actividad y actualiza la pila de actividades según corresponda.

Cómo crear un DeepLinkRequest

Un DeepLinkRequest representa un vínculo directo entrante. Contiene un DeepLinkUri y un RequestExtras opcional con información adicional, como la acción de intent o el tipo de MIME.

Proporcionar extras de DeepLinkRequest

Para almacenar información adicional relacionada con el vínculo directo, usa la clase RequestExtras. Para que la definición y la creación de instancias de extras sean seguras para los tipos, la biblioteca proporciona la interfaz RequestExtrasKey y el DSL requestExtras.

Además, la biblioteca proporciona dos claves adicionales y asistentes asociados:

Para definir tus propios extras personalizados, implementa la interfaz RequestExtrasKey con un genérico con tipo:

También puedes usar emptyRequestExtras() para construir una instancia vacía o combinar extras con los operadores + (plus) y - (minus).

Crea un DeepLinkRequest a partir de un Intent

En Android, puedes crear un DeepLinkRequest directamente desde un Intent. Cuando se construye de esta manera, el DeepLinkRequest se compila de la siguiente manera:

  • El uri se copia del campo data del intent.
  • Si no es nulo, el tipo de MIME y los extras de la acción se establecen a partir de los campos de intent correspondientes.
  • Todos los intent.extras con valores no nulos se guardan como un SavedState en DeepLinkRequest.IntentExtrasKey.
  • Se agregan los extras adicionales que se proporcionan con el parámetro extras.

Un DeepLinkMatcher asigna instancias entrantes de DeepLinkRequest a claves de navegación que se pueden agregar a la pila de actividades de tu app. Navigation 3 proporciona tres comparadores integrados: UriDeepLinkMatcher para la coincidencia de URI basada en patrones, StaticKeyDeepLinkMatcher para vínculos básicos y BackStackMatcher para compilar pilas de actividades sintéticas. La biblioteca también admite comparadores personalizados para casos de uso que no están cubiertos por los comparadores integrados.

Para obtener más información, consulta Cómo crear DeepLinkMatchers.

Cómo agregar filtros de intents

Para habilitar un vínculo directo que inicie tu actividad, debes definir los elementos <intent-filter> correspondientes en el AndroidManifest.xml de tu app. Para obtener más información, consulta Cómo agregar filtros de intents para vínculos entrantes.

Coincidir con una solicitud entrante

Después de crear tus instancias de DeepLinkMatcher, puedes hacer coincidir las solicitudes entrantes en tu actividad.

Para que coincida con una solicitud entrante, completa los siguientes pasos:

  1. Crea una instancia de tus instancias de DeepLinkMatcher.
  2. Intercala todas tus instancias de DeepLinkMatcher, ya sea de forma explícita o con vinculaciones múltiples.
  3. Crea un DeepLinkRequest a partir del Intent entrante.
  4. Compara la solicitud con todos los comparadores y encuentra la mejor coincidencia.
  5. Crea la pila de actividades a partir del resultado de la coincidencia.