Lorsqu’un lien cliqué ou une requête programmatique appelle une intention d’URI Web, le système Android tente chacune des actions suivantes, dans l’ordre séquentiel, jusqu’à ce que la requête réussisse:
- Ouvrez l’application préférée de l’utilisateur qui peut gérer l’URI, si celle-ci est désignée.
- Ouvrez la seule application disponible capable de gérer l’URI.
- Permet à l’utilisateur de 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 Liens d’applications dans Android Studio pour ajouter des Liens d’applications Android.
Ajouter des filtres d’intention pour les liens entrants
Pour créer un lien vers le contenu de votre application, ajoutez un filtre d’intention contenant ces éléments et valeurs d’attribut dans votre manifeste :
<action>
Spécifiez l’action d’intentionACTION_VIEW
afin que le filtre d’intention puisse être atteint à partir de la recherche Google.<data>
Ajoutez une ou plusieurs balises<data>
, chacune représentant un format d’URI qui résout l’activité. Au minimum, la balise<data>
doit inclure 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. 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égorieBROWSABLE
. Il est nécessaire pour que le filtre d’intention soit accessible à partir d’un navigateur Web. Sans cela, cliquer sur un lien dans un navigateur ne peut pas résoudre votre application.
Inclut également la catégorie DEFAULT
.Cela permet à votre application de répondre aux intentions implicites. Sans cela, l’activité peut être démarrée uniquement si l’intention spécifie le nom de votre composant d’application.
L’extrait XML suivant montre comment vous pouvez spécifier un filtre d’intention dans votre manifeste pour la liaison profonde. Les URI "example://gizmos"
et "http://www.example.com/gizmos"
résolvent toutes les 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’intention 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 que vous créiez des filtres séparés lorsque votre intention est de déclarer des éléments uniques (comme une combinaison spécifique de scheme
et host
), car plusieurs éléments <data>
dans le même filtre d’intention sont en fait fusionnés ensemble pour tenir compte de toutes les variations de leurs attributs combinés. Par exemple, considérez ce qui suit:
<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 supporte que https://www.example.com
et app://open.my.app
. Cependant, il prend en charge ces deux, plus ceux-ci: app://www.example.com
et https://open.my.app
.
Une fois que vous avez ajouté des filtres d’intention avec des URI pour le contenu de l’activité à votre appmanifest, Android peut acheminer tous les Intent
qui ont des URI correspondants à votre application au moment de l’exécution.
Pour en savoir plus sur la définition des filtres d’intention, consultez Autoriser d’autres applications à démarrer votre activité.
Lire les données des intentions entrantes
Une fois que le système démarre votre activité via un filtre d’intention, vous pouvez utiliser les données fournies par le Intent
pour déterminer ce que vous devez rendre. Appelez les méthodes getData()
et getAction()
pour récupérer les données et l’action associées au Intent
entrant. Vous pouvez appeler ces méthodes à tout moment du cycle de vie de l’activité, mais vous devez généralement le faire lors de rappels précoces tels que onCreate()
ou onStart()
.
Voici un extrait qui montre comment récupérer des données à partir d’unIntent
:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main) val action: String? = intent?.action val data: Uri? = intent?.data}
Java
@Overridepublic 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 de l’utilisateur:
- Le lien profond doit amener les utilisateurs directement au contenu, sans invites, pages interstitielles ou connexions. Assurez-vous que les utilisateurs peuventvoir le contenu de l’application même s’ils n’ont jamais ouvert l’application auparavant.Il est acceptable d’inviter les utilisateurs à des interactions ultérieures ou à l’ouverture de l’application à partir du Lanceur.
- Suivez les instructions de conception décrites dans Navigation avec Back and Up afin que votre application corresponde aux attentes des utilisateurs en matière de navigation arrière une fois qu’ils ont accédé à votre application via un lien profond.
Testez vos liens profonds
Vous pouvez utiliser Android DebugBridge avec l’outil gestionnaire d’activités (am) pour tester que le filtre d’intention que vous avez spécifié pour la liaison profonde se résout avec l’activité correcte de l’application. Vous pouvez exécuter la commande adb sur un périphérique ou un émulateur.
La syntaxe générale pour tester un URI de filtre d’intention avec adb est:
$ adb shell am start -W -a android.intent.action.VIEW -d <URI> <PACKAGE>
Par exemple, la commande ci-dessous essaie d’afficher une activité d’application cible quiest associée à l’URI spécifié.
$ adb shell am start -W -a android.intent.action.VIEW -d "example://gizmos" com.example.android
Le gestionnaire de déclaration et d’intention de manifeste que vous définissez ci-dessus définit la connexion entre votre application et un site Web et ce qu’il faut faire avec les liens entrants. Cependant, 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 vérifier cette connexion. La leçon suivante explique comment mettre en œuvre cette vérification.