Créer des liens profonds vers le contenu d'une application

Lorsqu'un clic sur un lien ou une requête programmatique appelle un intent URI Web, le système Android tente chacune des actions suivantes, dans un ordre séquentiel, jusqu'à ce que la requête aboutisse:

  1. Ouvrez l'application préférée de l'utilisateur capable de gérer l'URI, le cas échéant.
  2. Ouvrez la seule application disponible pouvant gérer l'URI.
  3. 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 Assistant App Links dans Android Studio pour ajouter Android App Links.

Remarque : À partir d'Android 12 (niveau d'API 31), une version générique L'intent Web ne correspond à 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 domaine, l'intent Web renvoie vers l'application de navigateur par défaut de l'utilisateur à la place.

Ajouter des filtres d'intent pour les liens entrants

Pour créer un lien vers le contenu de votre appli, ajoutez un filtre d'intent qui contient les éléments et valeurs d'attribut suivants dans votre fichier manifeste:

<action>
Spécifiez l'action d'intent ACTION_VIEW pour que que le filtre d'intent est accessible depuis la recherche Google.
<data>
Ajouter un ou plusieurs <data> , chacun représentant un format d'URI qui résout l'activité. Au minimum, le La balise <data> doit inclure le android:scheme .

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

<category>
Inclure BROWSABLE catégorie. Elle est nécessaire pour que le filtre d'intent soit accessible depuis un navigateur. Sans cela, un clic sur un lien dans un navigateur ne permet pas d'accéder à votre application.

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

L'extrait de code 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” correspondent 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, vous devez créer des filtres distincts si vous souhaitez déclarer des valeurs uniques URL (par exemple, une combinaison spécifique de scheme et host), car plusieurs éléments <data> du même filtre d'intent sont fusionnés pour tenir compte de toutes les variantes de leurs attributs combinés. Voici quelques exemples:

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

Cela peut sembler n'accepter que https://www.example.com et app://open.my.app Cependant, il prend en charge ces deux types de conversions, en plus les suivants: app://www.example.com et https://open.my.app.

Attention:Si plusieurs activités contiennent des filtres d'intent qui renvoient le même Android App Links a été validé, il n'y a aucune garantie quant à 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 application manifeste, Android est en mesure d'acheminer n'importe quelle Intent dont les URI correspondent à ceux de votre application au moment de l'exécution.

Pour en savoir plus sur la définition de 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 Utilisez les données fournies par Intent pour déterminer ce que vous devez afficher. Appeler les getData() et getAction() pour récupérer les données et action associée au Intent entrant. Vous pouvez appeler ces méthodes à tout moment au cours du cycle de vie de l'activité, doit généralement le faire lors des premiers rappels, par exemple onCreate() ou onStart()

Voici un extrait de code montrant comment récupérer des données 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'il n'a jamais ouvert l'application. Il est acceptable d'informer les utilisateurs lors d'interactions ultérieures ou lorsqu'ils ouvrent l'application. à partir du Lanceur d'applications.
  • Suivez les conseils de conception décrits dans Navigation avec Retour et Haut afin que votre application corresponde des attentes en termes de navigation vers l'arrière lorsqu'ils accèdent à votre application via un lien profond.

Tester vos liens profonds

Vous pouvez utiliser l'outil de débogage Android Pont avec le gestionnaire d'activités (am) pour vérifier que le filtre d'intent Les URI que vous avez spécifiés pour les liens profonds renvoient à l'activité appropriée dans l'application. Toi peut 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é dans l'application cible qui est associé à l'URI spécifié.

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

La déclaration du 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 et que faire avec les liens entrants. Toutefois, dans Pour que le système considère votre application comme gestionnaire par défaut pour un ensemble d'URI, vous devez et demander au système de vérifier cette connexion. La leçon suivante vous explique comment mettre en œuvre cette vérification.

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