Créer des liens profonds

Les liens profonds vous permettent de rediriger les utilisateurs directement vers votre application à partir de navigateurs Web, de notifications, de réseaux sociaux, d'annonces et d'autres sources. Les liens profonds permettent des transitions directes d'application à application et de Web à application, ce qui peut vous aider à augmenter l'engagement grâce à un contenu contextuel et ciblé.

Ce guide explique le fonctionnement des liens profonds, et comment les créer et les tester pour votre contenu.

Pour les liens profonds qui font référence à votre propre site Web ou à vos propres domaines, nous vous recommandons d'utiliser des liens d'application, qui offrent une expérience fluide et fiable à vos utilisateurs.

Fonctionnement des liens profonds

Les liens profonds sont une fonctionnalité système générale d'Android, compatible avec toutes les versions et tous les appareils. Il exploite le système d'intents d'Android pour acheminer les liens profonds vers les applications concernées. Les applications qui souhaitent gérer un URI de lien profond spécifique déclarent un filtre d'intent correspondant dans leur fichier manifeste d'application.

Au moment de l'exécution, lorsque l'utilisateur appuie sur un lien, Android déclenche un intent et tente de l'acheminer vers une application. Étant donné que plusieurs applications peuvent déclarer des filtres d'intent correspondant à un URI donné, Android effectue les actions suivantes, dans cet ordre, pour acheminer l'intent :

  1. Ouvrez l'application par défaut de l'utilisateur qui peut gérer l'URI, si une application a été désignée.
  2. Ouvrez la seule application disponible capable de gérer l'URI.
  3. Autoriser l'utilisateur à sélectionner une application dans une boîte de dialogue de désambiguïsation.

Cela signifie que, même si vos filtres d'intent correspondent à un URI donné, rien ne garantit que le système acheminera l'intent de lien profond vers votre application. L'utilisateur joue un rôle clé dans la gestion de l'application qui gère l'intent, ce qui lui donne le contrôle et lui offre un choix. Pour mieux contrôler les liens profonds vers votre site Web et vos domaines, essayez d'utiliser les liens d'application.

La boîte de dialogue de désambiguïsation d'Android permet à l'utilisateur de voir toutes les applications installées qui se sont enregistrées pour gérer un intent de lien profond. L'utilisateur peut également sélectionner une application par défaut pour ce type de lien. Une fois que l'utilisateur a défini une application par défaut, le système n'affiche plus la boîte de dialogue pour cet intent spécifique, et l'application choisie s'ouvre automatiquement.

Boîte de dialogue de sélection d'application du système Android affichant les options d'application pour un lien.
Figure 1. Boîte de dialogue de désambiguïsation

Le comportement de la boîte de dialogue de désambiguïsation a évolué au fil des versions d'Android. Par exemple, sur Android 12 ou version ultérieure, les liens Web qui ne sont pas des liens d'application validés s'ouvrent généralement dans un navigateur Web par défaut, tandis que sur les versions précédentes, une boîte de dialogue de désambiguïsation peut s'afficher si une application peut gérer le lien Web.

Types de liens profonds

Vous pouvez utiliser trois types de liens profonds sur Android :

  • Liens profonds personnalisés : il s'agit de liens profonds qui utilisent un schéma d'URI personnalisé (tel que example://products/123) pour rediriger un utilisateur directement vers un contenu spécifique d'une application. Ils sont efficaces pour la navigation interne ou les liens provenant de sources que vous contrôlez, mais ils ne sont pas des liens Web standards et peuvent toujours déclencher la boîte de dialogue de désambiguïsation si une autre application enregistre le même schéma personnalisé.
  • Liens Web : il s'agit de liens profonds qui utilisent les schémas standards http et https. Ils sont plus polyvalents, car il s'agit d'URL standards, mais sur Android 12 et versions ultérieures, ils déclenchent presque toujours la boîte de dialogue de désambiguïsation. Cela signifie qu'ils sont susceptibles d'être gérés par défaut par le navigateur Web de l'utilisateur, plutôt que d'être acheminés vers votre application.
  • App Links : disponibles depuis Android 6.0 (niveau d'API 23), il s'agit de liens Web validés. Grâce à un processus d'association de site Web, vous pouvez prouver au système Android que vous êtes propriétaire du domaine. Une fois la validation effectuée, le système redirige automatiquement les liens de ce domaine vers votre application, en ignorant complètement la boîte de dialogue de désambiguïsation. Cela permet de créer une expérience fiable et fluide pour vos utilisateurs.

Ajouter des filtres d'intent pour les liens entrants

Pour créer un lien vers le contenu de votre application, ajoutez un filtre d'intent contenant ces éléments et valeurs d'attributs dans votre fichier manifeste :

<action>

Spécifiez l'action d'intent ACTION_VIEW afin que le filtre d'intent soit accessible depuis la recherche Google.

<data>

Ajoutez une ou plusieurs balises <data>, chacune représentant un format d'URI qui renvoie à l'activité. La balise <data> doit au moins inclure l'attribut android:scheme.

Vous pouvez ajouter d'autres attributs pour affiner davantage le type d'URI accepté par l'activité. Par exemple, vous pouvez avoir plusieurs activités qui acceptent des URI similaires, mais qui diffèrent en fonction du chemin d'accès. Dans ce cas, utilisez l'attribut android:path ou ses variantes pathPattern ou pathPrefix pour différencier l'activité que le système doit ouvrir pour différents chemins d'URI.

<category>

Incluez la catégorie BROWSABLE. Il est nécessaire pour que le filtre d'intent soit accessible depuis un navigateur Web. Sans cela, cliquer sur un lien dans un navigateur ne peut pas rediriger vers votre application.

Incluez également la catégorie DEFAULT. Cela permet à votre application de répondre aux intents implicites. Sans cela, l'activité ne peut être lancée que si l'intent spécifie le nom du composant de votre application.

L'extrait XML suivant montre comment spécifier un filtre d'intent dans votre fichier manifeste pour les liens profonds. Les URI "example://gizmos" et "http://www.example.com/gizmos" renvoient tous deux à cette activité.

<activity
    android:name="com.example.android.GizmosActivity"
    android:label="@string/title_gizmos" >
    <intent-filter android:label="@string/filter_view_http_gizmos">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <!-- Accepts URIs that begin with "http://www.example.com/gizmos" -->
        <data android:scheme="http"
              android:host="www.example.com"
              android:pathPrefix="/gizmos" />
        <!-- note that the leading "/" is required for pathPrefix-->
    </intent-filter>
    <intent-filter android:label="@string/filter_view_example_gizmos">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <!-- Accepts URIs that begin with "example://gizmos" -->
        <data android:scheme="example"
              android:host="gizmos" />
    </intent-filter>
</activity>

Notez que les deux filtres d'intent ne diffèrent que par l'élément <data>. Bien qu'il soit possible d'inclure plusieurs éléments <data> dans le même filtre, il est important de créer des filtres distincts lorsque vous souhaitez déclarer des URL uniques (par exemple, une combinaison spécifique de scheme et host), car plusieurs éléments <data> dans le même filtre d'intent sont en fait fusionnés pour tenir compte de toutes les variantes de leurs attributs combinés. Par exemple, tenez compte des points suivants :

<intent-filter>
  ...
  <data android:scheme="https" android:host="www.example.com" />
  <data android:scheme="app" android:host="open.my.app" />
</intent-filter>

Il peut sembler que cela n'est compatible qu'avec https://www.example.com et app://open.my.app. Toutefois, il accepte en réalité ces deux types, ainsi que les suivants : app://www.example.com et https://open.my.app.

Une fois que vous avez ajouté des filtres d'intent avec des URI pour le contenu d'activité au fichier manifeste de votre application, Android peut acheminer tout Intent ayant des URI correspondants vers votre application au moment de l'exécution.

Pour en savoir plus sur la définition des filtres d'intent, consultez Autoriser d'autres applications à démarrer votre activité.

Lire les données des intents entrants

Une fois que le système a lancé votre activité via un filtre d'intent, vous pouvez utiliser les données fournies par l'Intent pour déterminer ce que vous devez afficher. Appelez les méthodes getData() et getAction() pour récupérer les données et l'action associées à l'Intent entrant. Vous pouvez appeler ces méthodes à tout moment au cours du cycle de vie de l'activité, mais il vaut généralement mieux le faire lors des premiers rappels, comme onCreate() ou onStart.

Voici un extrait de code qui montre comment récupérer des données à partir d'un Intent :

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main)

    val action: String? = intent?.action
    val data: Uri? = intent?.data
}

Java

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Intent intent = getIntent();
    String action = intent.getAction();
    Uri data = intent.getData();
}

Suivez ces bonnes pratiques pour améliorer l'expérience utilisateur :

  • Le lien profond doit rediriger directement les utilisateurs vers le contenu, sans aucune invite, page interstitielle ni connexion. Assurez-vous que les utilisateurs peuvent voir le contenu de l'application même s'ils ne l'ont jamais ouverte auparavant. Vous pouvez inviter les utilisateurs à se connecter lors des interactions suivantes ou lorsqu'ils ouvrent l'application depuis le lanceur d'applications.
  • Suivez les consignes de conception décrites dans Navigation avec les boutons Retour et Haut afin que votre application réponde aux attentes des utilisateurs en matière de navigation vers l'arrière après avoir accédé à votre application via un lien profond.

Tester vos liens profonds

Vous pouvez utiliser Android Debug Bridge avec l'outil Activity Manager (am) pour vérifier que les URI de filtre d'intent que vous avez spécifiés pour les liens profonds renvoient à l'activité appropriée de l'application. Vous pouvez exécuter la commande adb sur un appareil ou un émulateur.

La syntaxe générale pour tester un URI de filtre d'intent avec adb est la suivante :

$ adb shell am start
        -W -a android.intent.action.VIEW
        -d <URI> <PACKAGE>

Par exemple, la commande suivante tente d'afficher une activité d'application cible associée à l'URI spécifié.

$ adb shell am start
        -W -a android.intent.action.VIEW
        -d "example://gizmos" com.example.android

À partir d'Android 17, vous pouvez également utiliser l'option --debug-link avec am start pour diagnostiquer la façon dont le système résout une URL et inspecter les filtres d'intent correspondants ou les règles de liens d'application dynamiques. Pour en savoir plus, consultez Diagnostiquer la résolution des liens avec l'option debug-link.

La déclaration du fichier manifeste et le gestionnaire d'intent que vous définissez déterminent la connexion entre votre application et un site Web, ainsi que l'action à effectuer avec les liens entrants. Toutefois, pour que le système traite votre application comme le gestionnaire par défaut d'un ensemble d'URI, vous devez également demander au système de valider cette connexion. Valider les liens vers une application explique comment implémenter cette validation.

Pour en savoir plus sur les intents et les liens d'application, consultez les ressources suivantes :