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. Ils permettent des transitions directes entre applications et entre le Web et une application, ce qui peut vous aider à augmenter l'engagement grâce à des contenus contextuels et ciblés.
Ce guide explique comment fonctionnent les liens profonds, et comment en créer et en tester pour vos contenus.
Pour les liens profonds qui font référence à votre propre site Web ou à vos propres domaines, nous vous recommandons d'utiliser des liens vers une application, qui offrent une expérience fluide et fiable à vos utilisateurs.
Fonctionnement des liens profonds
Les liens profonds sont une fonctionnalité générale du système Android, compatible avec toutes les versions et tous les appareils. Ils exploitent le système d'intents d'Android pour rediriger 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 leurs fichiers manifeste d'application.
Lors de l'exécution, lorsque l'utilisateur appuie sur un lien, Android déclenche un intent et tente de le rediriger vers une application. Plusieurs applications pouvant déclarer des filtres d'intent correspondant à un URI donné, Android effectue les actions suivantes, dans cet ordre, pour rediriger l'intent :
- Ouvrez l'application par défaut de l'utilisateur qui peut gérer l'URI, si elle a été désignée.
- Ouvrez la seule application disponible qui peut gérer l'URI.
- Permettez à l'utilisateur de sélectionner une application dans une boîte de dialogue de sélection d'application.
Cela signifie que, même si vos filtres d'intent correspondent à un URI donné, le système ne garantit pas qu'il redirigera 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 propre site Web et vos propres domaines, essayez d'utiliser des liens vers une application.
La boîte de dialogue de sélection d'application 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 comme 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.

Figure 1. Boîte de dialogue de sélection d'application
Le comportement de la boîte de dialogue de sélection d'application a évolué au fil des versions d'Android. Par exemple, sur Android 12 et versions ultérieures, les liens Web qui ne sont pas des liens vers une 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 sélection d'application pouvait s'afficher si une application pouvait gérer le lien Web.
Remarque : À partir d'Android 12 (niveau d'API 31), un intent Web générique ne se résout en une activité dans votre application que si celle-ci est approuvée pour le domaine spécifique contenu dans cet intent Web. Si votre application n'est pas approuvée pour le domaine, l'intent Web se résout à la place dans l'application de navigateur par défaut de l'utilisateur.
Types de liens profonds
Vous pouvez prendre en charge 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 utiles 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 sélection d'application 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
httpethttps. 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 sélection d'application. Cela signifie qu'ils sont susceptibles d'être gérés par le navigateur Web de l'utilisateur par défaut, plutôt que d'être redirigés vers votre application. - Liens vers une application : 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 validé, le système redirige automatiquement les liens de ce domaine directement vers votre application, en ignorant complètement la boîte de dialogue de sélection d'application. Cela crée 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 :
Spécifiez l'action d'intent ACTION_VIEW afin que le filtre d'intent soit accessible
depuis la recherche Google.
Ajoutez une ou plusieurs balises <data>, chacune représentant un format d'URI qui
se résout en l'activité. Au minimum, la balise <data> doit inclure l'attribut
android:scheme.
Vous pouvez ajouter d'autres attributs pour affiner 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 simplement en fonction du nom du chemin. Dans ce cas, utilisez l'
android:path attribut ou ses pathPattern ou pathPrefix variantes pour
différencier l'activité que le système doit ouvrir pour différents chemins d'URI.
Incluez la BROWSABLE catégorie. Elle est requise pour que le filtre d'intent soit accessible depuis un navigateur Web. Sans elle, cliquer sur un lien dans un navigateur ne peut pas se résoudre dans votre application.
Incluez également la DEFAULT catégorie. Cela permet à votre application de répondre aux intents implicites. Sans cela, l'activité ne peut être démarré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" se résolvent tous deux en 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 avez l'intention de déclarer
des URL uniques (telles qu'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 variations de leurs attributs combinés. Prenons l'exemple suivant :
<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 ne soit compatible qu'avec https://www.example.com et app://open.my.app. Toutefois, il est en fait compatible avec ces deux éléments, ainsi qu'avec les suivants : app://www.example.com et https://open.my.app.
Attention : Si plusieurs activités contiennent des filtres d'intent qui se résolvent dans le même lien vers une application Android validé, il n'y a aucune garantie quant à l'activité qui gère le lien.
Une fois que vous avez ajouté des filtres d'intent avec des URI pour le contenu d'activité à votre fichier manifeste d'application, Android peut rediriger tout Intent contenant des URI correspondants vers
votre application lors 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 démarré votre activité via un filtre d'intent, vous pouvez utiliser les données
fournies par 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'élément 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 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 les utilisateurs directement 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 à interagir ultérieurement ou lorsqu'ils ouvrent l'application à partir du lanceur.
- Suivez les consignes de conception décrites dans Navigation avec les boutons "Retour" et "Haut" afin que votre application corresponde aux attentes des utilisateurs en matière de navigation vers l'arrière après qu'ils y sont entrés 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 se résolvent dans l'activité d'application appropriée. 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
Remarque : Lorsque vous définissez une collection de types primitifs dans une route, telle que
**@Serializable data class Product(val colors: List)**, le format d'URL de lien profond généré automatiquement est **basePath?colors={value**}. Si vous tentez
de spécifier un URI avec plusieurs paramètres de requête (par exemple,
**basepath?colors=red&colors=blue**), vous devez échapper l'esperluette
(par exemple, **basepath?colors=red\&colors=blue**).
La déclaration de fichier manifeste et le gestionnaire d'intent que vous définissez déterminent la connexion entre votre application et un site Web, ainsi que la marche à suivre pour les liens entrants. Toutefois, pour que le système traite votre application comme gestionnaire par défaut pour un ensemble d'URI, vous devez également demander au système de vérifier cette connexion. La section Valider les liens vers une application explique comment implémenter cette validation.
Pour en savoir plus sur les intents et les liens vers une application, consultez les ressources suivantes :
- Intents et filtres d'intents
- Autoriser d'autres applications à démarrer votre activité
- Ajouter des liens vers une application Android avec Android Studio