Prendre en charge les liens profonds

À partir de la version 1.2.0, Navigation 3 est compatible avec les liens profonds vers des 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. Mettez en correspondance les requêtes entrantes dans la méthode onCreate ou onNewIntent de votre activité, puis mettez à jour votre pile d'historique en conséquence.

Créer un élément DeepLinkRequest

Un DeepLinkRequest représente un lien profond entrant. Il contient un DeepLinkUri et un RequestExtras facultatif 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 classe RequestExtras. Pour que la définition et l'instanciation des extras soient de type sécurisé, la bibliothèque fournit l'interface RequestExtrasKey et le DSL requestExtras.

De plus, la bibliothèque fournit deux clés supplémentaires et des assistants associés :

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

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

Créer un DeepLinkRequest à partir d'un Intent

Sur Android, vous pouvez créer un DeepLinkRequest directement à partir d'un Intent. Lorsqu'il est construit de cette manière, le DeepLinkRequest est créé comme suit :

  • Le uri est copié à partir du champ data de l'intent.
  • Si la valeur n'est pas nulle, le type MIME et les extras d'action 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 touches de navigation qui peuvent être ajoutées à la pile « Retour » de votre application. Navigation 3 fournit trois outils de mise en correspondance intégrés : UriDeepLinkMatcher pour la mise en correspondance d'URI basée sur des modèles, StaticKeyDeepLinkMatcher pour les liens de base et BackStackMatcher pour créer des piles « Retour » synthétiques. La bibliothèque est également compatible avec les outils de mise en correspondance personnalisés pour les cas d'utilisation non couverts par les outils de mise en correspondance intégrés.

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

Ajouter des filtres d'intent

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

Mettre en correspondance une requête entrante

Après avoir créé vos instances DeepLinkMatcher, vous pouvez mettre en correspondance 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, soit explicitement, soit en utilisant des liaisons multiples.
  3. Créez un DeepLinkRequest à partir du Intent entrant.
  4. Mettre en correspondance la requête avec tous les outils de mise en correspondance et trouver la meilleure correspondance.
  5. Créez la pile « Retour » à partir du résultat de la correspondance.