Prendre en charge les liens profonds

À partir de la version 1.2.0, Navigation 3 est compatible avec les liens profonds vers les destinations de votre application à l'aide des classes DeepLinkRequest et DeepLinkMatcher.

Pour prendre en charge les liens profonds dans votre application, procédez comme suit :

  1. Définissez des filtres d'intent dans votre fichier AndroidManifest.xml pour spécifier les URI que votre application peut gérer.
  2. Créez des instances DeepLinkMatcher pour mapper les requêtes entrantes à vos clés de navigation.
  3. Faites correspondre les requêtes entrantes dans la méthode onCreate ou onNewIntent de votre activité, puis mettez à jour votre pile "Retour" en conséquence.

Créer une DeepLinkRequest

Une DeepLinkRequest représente un lien profond entrant. Elle contient une DeepLinkUri et des RequestExtras facultatifs avec des informations supplémentaires, telles que l'action d'intent ou le type MIME.

Fournir des extras DeepLinkRequest

Pour stocker des informations supplémentaires liées au lien profond, utilisez la RequestExtras classe. Pour rendre la définition et l'instanciation des extras de type sécurisé, la bibliothèque fournit l'interface RequestExtrasKey et le DSL requestExtras.

De plus, la bibliothèque fournit deux clés d'extras et des assistants associés :

Pour définir vos propres extras personnalisés, implémentez l'RequestExtrasKey interface avec un générique typé :

Vous pouvez également utiliser emptyRequestExtras() pour construire une instance vide ou combiner des extras à l'aide des opérateurs + (plus) et - (minus).

Créer une DeepLinkRequest à partir d'un Intent

Sur Android, vous pouvez créer une DeepLinkRequest directement à partir d'un Intent. Lorsqu'elle est construite de cette manière, la DeepLinkRequest est créée comme suit :

  • Le uri est copié à partir du champ data de l'intent.
  • S'ils ne sont pas nuls, les extras de type MIME et d'action extras sont définis à partir des champs d'intent correspondants.
  • Tous les intent.extras avec des valeurs non nulles sont enregistrés en tant que SavedState dans DeepLinkRequest.IntentExtrasKey.
  • Tous les extras supplémentaires fournis à l'aide du paramètre extras sont ajoutés.

Un DeepLinkMatcher mappe les instances DeepLinkRequest entrantes aux clés de navigation qui peuvent être ajoutées à la pile "Retour" de votre application. Navigation 3 fournit trois correspondances intégrées : UriDeepLinkMatcher pour la correspondance d'URI basée sur des modèles, StaticKeyDeepLinkMatcher pour les liens de base et BackStackMatcher pour la création de piles "Retour" synthétiques. La bibliothèque est également compatible avec les correspondances personnalisées pour les cas d'utilisation non couverts par les correspondances intégrées.

Pour en savoir plus, consultez Créer des DeepLinkMatchers.

Ajouter des filtres d'intent

Pour qu'un lien profond puisse démarrer votre activité, vous devez définir les éléments correspondants <intent-filter> dans le AndroidManifest.xml de votre application. Pour en savoir plus, consultez Ajouter des filtres d'intent pour les liens entrants.

Faire correspondre une requête entrante

Une fois que vous avez créé vos instances DeepLinkMatcher, vous pouvez faire correspondre les requêtes entrantes dans votre activité.

Pour faire correspondre une requête entrante, procédez comme suit :

  1. Instanciez vos instances DeepLinkMatcher.
  2. Regroupez toutes vos instances DeepLinkMatcher, de manière explicite ou à l'aide de multibindings.
  3. Créez une DeepLinkRequest à partir de l'Intent entrant.
  4. Faites correspondre la requête à toutes les correspondances et trouvez la meilleure.
  5. Créez la pile "Retour" à partir du résultat de la correspondance.