Lorsqu'un lien cliqué ou une requête programmatique appelle un intent d'URI Web, le système Android essaie chacune des actions suivantes, dans l'ordre séquentiel, jusqu'à ce que la requête aboutisse:
- Ouvrez l'application préférée de l'utilisateur pouvant gérer l'URI, le cas échéant.
- Ouvrez la seule application disponible pouvant gérer l'URI.
- Autorisez l'utilisateur à sélectionner une application dans une boîte de dialogue.
Suivez les étapes ci-dessous pour créer et tester des liens vers votre contenu. Vous pouvez également utiliser l'assistant "App Links" dans Android Studio pour ajouter des Android App Links.
Remarque : À partir d'Android 12 (niveau d'API 31), un intent Web générique ne résout une activité dans votre application que si votre application 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 est résolu en faveur de l'application de navigateur par défaut de l'utilisateur.
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 ces valeurs d'attribut 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 se résout en activité. La balise<data>
doit inclure au minimum l'attributandroid: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 simplement en fonction du nom du chemin d'accès. Dans ce cas, utilisez l'attribut
android:path
ou ses variantespathPattern
oupathPrefix
pour différencier l'activité que le système doit ouvrir pour différents chemins d'URI. <category>
- Inclure la catégorie
BROWSABLE
. Il est nécessaire pour que le filtre d'intent soit accessible depuis un navigateur Web. Sans elle, le clic sur un lien dans un navigateur ne peut pas être résolu dans 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 le lien profond. 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 votre objectif est de déclarer des URL uniques (telles qu'une combinaison spécifique de scheme
et host
), car plusieurs éléments <data>
du même filtre d'intent sont en fait fusionnés pour prendre en compte toutes les variantes 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 cette méthode ne soit compatible qu'avec https://www.example.com
et app://open.my.app
. Toutefois, il est compatible avec ces deux éléments, ainsi qu'avec les éléments suivants : app://www.example.com
et https://open.my.app
.
Attention:Si plusieurs activités contiennent des filtres d'intent qui se résolvent au même Android App Link validé, il n'est pas garanti que l'activité gère le lien.
Une fois que vous avez ajouté des filtres d'intent avec des URI pour le contenu de l'activité à votre fichier manifeste d'application, Android peut acheminer tous les Intent
dont les URI correspondent à votre application au moment de l'exécution.
Pour en savoir plus sur la définition de filtres d'intent, consultez Autoriser les 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'Intent
entrante. 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 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 à effectuer des interactions ultérieures ou lorsqu'ils ouvrent l'application depuis le lanceur d'applications.
- Suivez les consignes de conception décrites dans la section Navigation avec les boutons Retour et Précédent afin que votre application corresponde aux attentes des utilisateurs en matière de navigation arrière après qu'ils ont 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 redirigent vers 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 ci-dessous 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
La déclaration de fichier manifeste et le gestionnaire d'intent que vous avez définis ci-dessus définissent 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 le gestionnaire par défaut d'un ensemble d'URI, vous devez également demander au système de valider cette connexion. La lecon suivante explique comment implémenter cette vérification.
Pour en savoir plus sur les intents et les liens d'application, consultez les ressources suivantes:
- Intents et filtres d'intents
- Autoriser d'autres applications à démarrer votre activité
- Ajouter des liens Android App Links avec Android Studio