Tester les liens vers une application

Lorsque vous implémentez la fonctionnalité d'association d'applications, vous devez tester la fonctionnalité d'association pour vous assurer que le système peut associer votre application à vos sites Web et gérer les requêtes d'URL comme prévu.

Pour tester un fichier de relevé existant, vous pouvez utiliser l'outil Statement List Generator and Tester (Générateur et testeur de liste de relevés).

Les sections suivantes décrivent comment tester manuellement la validation des liens d'application. Si vous préférez, vous pouvez tester la validation à partir de l'outil Play Deep Links ou de l'assistant pour les liens vers une application Android Studio.

Confirmer la liste des hôtes à valider

Lors des tests, vous devez confirmer la liste des hôtes associés que le système doit vérifier pour votre application. Établissez la liste de toutes les URL dont les filtres d'intent correspondants incluent les attributs et éléments suivants :

  • Attribut android:scheme avec la valeur http ou https
  • Attribut android:host avec un format d'URL de domaine
  • Élément d'action android.intent.action.VIEW
  • Élément de catégorie android.intent.category.BROWSABLE

Utilisez cette liste pour vérifier qu'un fichier JSON Digital Asset Links est fourni sur chaque hôte et sous-domaine nommés.

Confirmer les fichiers Digital Asset Links

Pour chaque site Web, utilisez l'API Digital Asset Links pour vérifier que le fichier JSON Digital Asset Links est correctement hébergé et défini :

https://digitalassetlinks.googleapis.com/v1/statements:list?
   source.web.site=https://<var>domain.name</var>:<var>optional_port</var>&amp;
   relation=delegate_permission/common.handle_all_urls

Pour les liens d'application dynamiques, vous pouvez également vérifier les extensions de relation.

https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://www.example.com&relation=delegate_permission/common.handle_all_urls&return_relation_extensions=true

Dans le cadre de votre processus de test, vous pouvez vérifier les paramètres système actuels pour la gestion des liens. Utilisez la commande suivante pour obtenir la liste des règles de gestion des liens existantes pour toutes les applications sur votre appareil connecté :

adb shell dumpsys package domain-preferred-apps

La commande suivante fait la même chose :

adb shell dumpsys package d

La commande renvoie la liste de chaque utilisateur ou profil défini sur l'appareil, précédée d'un en-tête au format suivant :

App linkages for user 0:

Sous cet en-tête, le résultat utilise le format suivant pour lister les paramètres de gestion des liens pour cet utilisateur :

Package: com.android.vending
Domains: play.google.com market.android.com
Status: always : 200000002

Cette liste indique les applications associées à chaque domaine pour cet utilisateur :

  • Package : identifie une application par son nom de package, tel qu'il est déclaré dans son fichier manifeste.
  • Domains : affiche la liste complète des hôtes dont cette application gère les liens Web, en utilisant des espaces comme délimiteurs.
  • Status : affiche le paramètre actuel de gestion des liens pour cette application. Une application qui a été validée et dont le fichier manifeste contient android:autoVerify="true" affiche l'état always. Le nombre hexadécimal qui suit cet état est lié à l'enregistrement par le système Android des préférences de l'utilisateur concernant l'association d'applications. Cette valeur n'indique pas si la validation a réussi.

Exemple de test

Pour que la validation des liens d'application réussisse, le système doit pouvoir valider votre application avec chacun des sites Web que vous spécifiez dans un filtre d'intent donné qui répond aux critères des liens d'application. L'exemple suivant montre une configuration de fichier manifeste avec plusieurs liens d'application définis :

<activity android:name=”MainActivity”>
        <intent-filter android:autoVerify="true">
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="https" />
            <data android:scheme="https" />
            <data android:host="www.example.com" />
            <data android:host="mobile.example.com" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="https" />
            <data android:host="www.example2.com" />
        </intent-filter>
    </activity>

    <activity android:name=”SecondActivity”>
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="https" />
            <data android:host="account.example.com" />
        </intent-filter>
    </activity>

      <activity android:name=”ThirdActivity”>
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="https" />
            <data android:host="map.example.com" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="market" />
            <data android:host="example.com" />
        </intent-filter>
      </activity>

</application>

Voici la liste des hôtes que la plate-forme tenterait de valider à partir du fichier manifeste précédent :

www.example.com
mobile.example.com
www.example2.com
account.example.com

Voici la liste des hôtes que la plate-forme ne tentera pas de valider à partir du fichier manifeste précédent :

map.example.com (it does not have android.intent.category.BROWSABLE)
market://example.com (it does not have either an "http" or "https" scheme)

Pour en savoir plus sur les listes d'instructions, consultez Créer une liste d'instructions.