App-Linking dans Android

Ce guide explique comment Android 6.0 prend en charge la liaison d’applications, une technique qui permet aux applications mobiles de répondre aux URL sur les sites web. Il explique ce qu’est la liaison d’applications, comment implémenter la liaison d’applications dans une application Android 6.0 et comment configurer un site web pour accorder des autorisations à l’application mobile pour un domaine.

Vue d’ensemble de la liaison d’applications

Les applications mobiles ne vivent plus dans un silo – dans de nombreux cas, elles sont un composant important de leur entreprise, ainsi que leur site web. Il est souhaitable pour les entreprises de connecter en toute transparence leur présence web et leurs applications mobiles, avec des liens sur un site web qui lancent des applications mobiles et affichent du contenu pertinent dans l’application mobile. La liaison d’applications (également appelée liaison approfondie) est une technique qui permet à un appareil mobile de répondre à un URI et de lancer une application mobile qui correspond à cet URI.

Android gère la liaison d’applications via le système d’intention : lorsque l’utilisateur clique sur un lien dans un navigateur mobile, le navigateur mobile distribue une intention qu’Android déléguera à une application inscrite. Par exemple, cliquer sur un lien sur un site web de cuisine ouvre une application mobile associée à ce site web et affiche une recette spécifique à l’utilisateur. Si plusieurs applications sont inscrites pour gérer cette intention, Android déclenche ce que l’on appelle une boîte de dialogue de désambiguation qui demande à l’utilisateur quelle application sélectionnera l’application qui doit gérer l’intention, par exemple :

Exemple de capture d’écran d’une boîte de dialogue lever l’ambiguïté

Android 6.0 améliore cela en utilisant la gestion automatique des liens. Il est possible pour Android d’inscrire automatiquement une application en tant que gestionnaire par défaut pour un URI . L’application se lance automatiquement et accède directement à l’activité appropriée. La façon dont Android 6.0 décide de gérer un clic d’URI dépend des critères suivants :

  1. Une application existante est déjà associée à l’URI : l’utilisateur a peut-être déjà associé une application existante à un URI. Dans ce cas, Android continuera à utiliser cette application.
  2. Aucune application existante n’est associée à l’URI, mais une application de prise en charge est installée : dans ce scénario, l’utilisateur n’a pas spécifié d’application existante. Par conséquent, Android utilisera l’application de prise en charge installée pour gérer la demande.
  3. Aucune application existante n’est associée à l’URI, mais de nombreuses applications de prise en charge sont installées : étant donné que plusieurs applications prennent en charge l’URI, la boîte de dialogue de désambiguation s’affiche et l’utilisateur doit sélectionner l’application qui gérera l’URI.

Si l’utilisateur n’a pas d’applications qui prennent en charge l’URI et qu’une application est ensuite installée, Android définit cette application comme gestionnaire par défaut pour l’URI après avoir vérifié l’association avec le site web associé à l’URI.

Ce guide explique comment configurer une application Android 6.0 et comment créer et publier le fichier Digital Asset Links pour prendre en charge la liaison d’applications dans Android 6.0.

Spécifications

Ce guide nécessite Xamarin.Android 6.1 et une application qui cible Android 6.0 (niveau d’API 23) ou version ultérieure.

La liaison d’applications est possible dans les versions antérieures d’Android à l’aide du package NuGet Rivets du magasin de composants Xamarin. Le package Rivets n’est pas compatible avec la liaison d’applications dans Android 6.0 ; il ne prend pas en charge la liaison d’applications Android 6.0.

Configuration de App-Linking dans Android 6.0

La configuration des liens d’application dans Android 6.0 implique deux étapes principales :

  1. Ajout d’un ou plusieurs filtres d’intention pour les URI du site web : les filtres d’intention guident Android dans la gestion d’un clic d’URL dans un navigateur mobile.
  2. Publication d’un fichier JSON Digital Asset Links sur le site web : il s’agit d’un fichier chargé sur un site web et utilisé par Android pour vérifier la relation entre l’application mobile et le domaine du site web. Sans cela, Android ne peut pas installer l’application comme handle par défaut pour les URI ; l’utilisateur doit le faire manuellement.

Configuration du filtre d’intentions

Il est nécessaire de configurer un filtre d’intention qui mappe un URI (ou éventuellement un ensemble d’URI) d’un site web à une activité dans une application Android. Dans Xamarin.Android, cette relation est établie en ornant une activité avec l’attribut IntentFilterAttribute. Le filtre d’intention doit déclarer les informations suivantes :

  • Intent.ActionView : inscrit le filtre d’intention pour répondre aux demandes d’affichage des informations
  • Categories : le filtre d’intention doit inscrire Intent.CategoryBrowsable et Intent.CategoryDefault pour pouvoir gérer correctement l’URI web.
  • DataScheme : le filtre d’intention doit déclarer http et/ou https. Il s’agit des deux seuls schémas valides.
  • DataHost : il s’agit du domaine d’où proviennent les URI.
  • DataPathPrefix : il s’agit d’un chemin d’accès facultatif aux ressources sur le site web.
  • AutoVerify : l’attribut autoVerify indique à Android de vérifier la relation entre l’application et le site web. Cela sera abordé plus en détail ci-dessous.

L’exemple suivant montre comment utiliser IntentFilterAttribute pour gérer les liens depuis https://www.recipe-app.com/recipes et depuis http://www.recipe-app.com/recipes:

[IntentFilter(new [] { Intent.ActionView },
              Categories = new[] { Intent.CategoryBrowsable, Intent.CategoryDefault },
              DataScheme = "http",
              DataHost = "recipe-app.com",
              DataPathPrefix = "/recipe",
              AutoVerify=true)]
public class RecipeActivity : Activity
{
    // Code for the activity omitted
}

Android vérifie chaque hôte identifié par les filtres d’intention par rapport au fichier de ressources numériques sur le site web avant d’inscrire l’application en tant que gestionnaire par défaut d’un URI. Tous les filtres d’intention doivent réussir la vérification avant qu’Android puisse établir l’application comme gestionnaire par défaut.

La liaison d’applications Android 6.0 nécessite qu’Android vérifie l’association entre l’application et le site web avant de définir l’application comme gestionnaire par défaut pour l’URI. Cette vérification se produit lors de la première installation de l’application. Le fichier Digital Assets Links est un fichier JSON hébergé par le ou les domaines web appropriés.

Notes

L’attribut android:autoVerify doit être défini par le filtre d’intention . Sinon, Android n’effectuera pas la vérification.

Le fichier est placé par le webmaster du domaine à l’emplacement https://domain/.well-known/assetlinks.json.

Le fichier de ressources numériques contient les métadonnées nécessaires à Android pour vérifier l’association. Un fichier assetlinks.json comporte les paires clé-valeur suivantes :

  • namespace : espace de noms de l’application Android.
  • package_name : nom du package de l’application Android (déclaré dans le manifeste de l’application).
  • sha256_cert_fingerprints : empreintes digitales SHA256 de l’application signée. Pour plus d’informations sur l’obtention de l’empreinte SHA256 d’une application, consultez le guide Recherche de la signature de votre magasin de clés.

L’extrait de code suivant est un exemple d’assetlinks.json avec une seule application répertoriée :

[
   {
      "relation": [
         "delegate_permission/common.handle_all_urls"
      ],
      "target": {
         "namespace": "android_app",
         "package_name": "com.example",
         "sha256_cert_fingerprints": [
            "14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"
         ]
      }
   }
]

Il est possible d’enregistrer plusieurs empreintes digitales SHA256 pour prendre en charge différentes versions ou builds de votre application. Ce fichier assetlinks.json suivant est un exemple d’inscription de plusieurs applications :

[
   {
      "relation": [
         "delegate_permission/common.handle_all_urls"
      ],
      "target": {
         "namespace": "android_app",
         "package_name": "example.com.puppies.app",
         "sha256_cert_fingerprints": [
            "14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"
         ]
      }
   },
   {
      "relation": [
         "delegate_permission/common.handle_all_urls"
      ],
      "target": {
         "namespace": "android_app",
         "package_name": "example.com.monkeys.app",
         "sha256_cert_fingerprints": [
            "14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"
         ]
      }
   }
]

Le site web Google Digital Asset Links dispose d’un outil en ligne qui peut vous aider à créer et à tester le fichier Digital Assets.

Après avoir implémenté des liens d’application, les différents éléments doivent être testés pour s’assurer qu’ils fonctionnent comme prévu.

Il est possible de vérifier que le fichier Digital Assets est correctement mis en forme et hébergé à l’aide de l’API Digital Asset Links de Google, comme indiqué dans cet exemple :

https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=
  https://<WEB SITE ADDRESS>:&relation=delegate_permission/common.handle_all_urls

Deux tests peuvent être effectués pour s’assurer que les filtres d’intention ont été correctement configurés et que l’application est définie comme gestionnaire par défaut pour un URI :

  1. Le fichier de ressources numériques est correctement hébergé comme décrit ci-dessus. Le premier test envoie une intention qu’Android doit rediriger vers l’application mobile. L’application Android doit lancer et afficher l’activité inscrite pour l’URL. À l’invite de commandes, tapez :

    $ adb shell am start -a android.intent.action.VIEW \
        -c android.intent.category.BROWSABLE \
        -d "http://<domain1>/recipe/scalloped-potato"
    
  2. Affichez les stratégies de gestion des liens existantes pour les applications installées sur un appareil donné. La commande suivante vide une liste des stratégies de liaison pour chaque utilisateur sur l’appareil avec les informations suivantes. Saisissez ensuite la commande suivante dans l’invite de commandes :

    $ adb shell dumpsys package domain-preferred-apps
    
    • Package : nom du package de l’application.
    • Domain : domaines (séparés par des espaces) dont les liens web seront gérés par l’application
    • Status: il s’agit de la status actuelle de gestion des liens pour l’application. La valeur de signifie toujours que l’application a android:autoVerify=true déclaré et a réussi la vérification du système. Il est suivi d’un nombre hexadécimal représentant l’enregistrement de la préférence du système Android.

    Par exemple :

    $ adb shell dumpsys package domain-preferred-apps
    
    App linkages for user 0:
    Package: com.android.vending
    Domains: play.google.com market.android.com
    Status: always : 200000002
    

Résumé

Ce guide explique comment fonctionne la liaison d’applications dans Android 6.0. Il a ensuite expliqué comment configurer une application Android 6.0 pour prendre en charge et répondre aux liens d’application. Il a également expliqué comment tester la liaison d’applications dans une application Android.