Supportare i link diretti

A partire dalla versione 1.2.0, Navigation 3 supporta il deep linking alle destinazioni nella tua app utilizzando le classi DeepLinkRequest e DeepLinkMatcher.

Per supportare i deep link nella tua app, completa i seguenti passaggi:

  1. Definisci i filtri per intent nel tuo AndroidManifest.xml per specificare quali URI possono essere gestiti dalla tua app.
  2. Crea istanze DeepLinkMatcher per mappare le richieste in entrata alle tue chiavi di navigazione.
  3. Abbina le richieste in arrivo nel metodo onCreate o onNewIntent della tua attività e aggiorna il back stack di conseguenza.

Crea un DeepLinkRequest

Un DeepLinkRequest rappresenta un deep link in entrata. Contiene un elemento DeepLinkUri e un elemento RequestExtras facoltativo con informazioni aggiuntive, ad esempio l'azione dell'intent o il tipo MIME.

Fornire DeepLinkRequest extra

Per memorizzare informazioni aggiuntive relative al deep link, utilizza la classe RequestExtras. Per rendere sicura la definizione e l'istanza degli extra, la libreria fornisce l'interfaccia RequestExtrasKey e il DSL requestExtras.

Inoltre, la libreria fornisce due chiavi aggiuntive e gli helper associati:

Per definire i tuoi extra personalizzati, implementa l'interfaccia RequestExtrasKey con un tipo generico:

Puoi anche utilizzare emptyRequestExtras() per creare un'istanza vuota o combinare gli extra utilizzando gli operatori + (plus) e - (minus).

Crea un DeepLinkRequest da un Intent

Su Android, puoi creare un DeepLinkRequest direttamente da un Intent. Se costruito in questo modo, DeepLinkRequest viene creato come segue:

  • uri viene copiato dal campo data dell'intent.
  • Se non è null, il tipo MIME e gli extra dell'azione vengono impostati dai campi dell'intent corrispondenti.
  • Tutti i intent.extras con valori non null vengono salvati come SavedState in DeepLinkRequest.IntentExtrasKey.
  • Vengono aggiunti eventuali extra aggiuntivi forniti utilizzando il parametro extras.

Un DeepLinkMatcher mappa le istanze DeepLinkRequest in entrata alle chiavi di navigazione che possono essere aggiunte al back stack della tua app. Navigation 3 fornisce tre matcher integrati: UriDeepLinkMatcher per la corrispondenza degli URI basata su pattern, StaticKeyDeepLinkMatcher per i link di base e BackStackMatcher per la creazione di back stack sintetici. La libreria supporta anche matcher personalizzati per i casi d'uso non coperti dai matcher integrati.

Per saperne di più, consulta Crea DeepLinkMatcher.

Aggiungi filtri per intent

Per consentire a un deep link di avviare la tua attività, devi definire gli elementi <intent-filter> corrispondenti nel file AndroidManifest.xml della tua app. Per saperne di più, consulta Aggiungi filtri per intent per i link in entrata.

Corrispondenza con una richiesta in entrata

Dopo aver creato le istanze DeepLinkMatcher, puoi abbinare le richieste in entrata nella tua attività.

Per trovare una corrispondenza con una richiesta in arrivo, segui questi passaggi:

  1. Crea un'istanza delle tue istanze DeepLinkMatcher.
  2. Raggruppa tutte le istanze DeepLinkMatcher, in modo esplicito o utilizzando i multibinding.
  3. Crea un DeepLinkRequest dal Intent in entrata.
  4. Confronta la richiesta con tutti i matcher e trova la corrispondenza migliore.
  5. Crea il back stack dal risultato della corrispondenza.