Loupe

Android : ouvrir les liens web directement dans votre application

Les applications mobiles sont souvent des versions améliorées de sites webs plus optimisés pour une utilisation sur grand écran ou tablette. Il est alors pertinent de proposer à vos utilisateurs de télécharger et d'utiliser l'application mobile. Une autre corde à notre arc sur Android est l'App-Linking : proposer à l'utilisateur d'ouvrir votre application dès qu'il clique sur une URL correspondant au site web de votre application. Vous le verrez dans cet article, c'est en plus très rapide à mettre en place ! 

Il est à noter que la solution proposée ne fonctionnera qu'à partir d'Android 6.0 et supérieur.

Comportement pour l'utilisateur

Pour l'utilisateur, c'est assez transparent (et magique) : une fois l'application installée sur son téléphone, s'il ouvre une URL prise en charge, alors il verra apparaître une petite fenêtre pour choisir l'application à utiliser :

Screenshot_1566371053.png

Il est aussi possible d'aller plus loin et de décider que votre application sera ouverte sans même proposer le choix à l'utilisateur. Bien sûr pour pouvoir faire cela, il faudra prouver que vous êtes bien le propriétaire du site web comme proposé à la fin de cet article. C'est par exemple la technique qu'utilise Amazon pour vous amener directement dans son application lorsque vous ouvrez un lien depuis leur mail. Il reste cependant possible pour l'utilisateur d'outrepasser ce comportement en utilisation une "navigation privée" dans Chrome (ou autre).

Abonnement à l'URL

Pour pouvoir vous "abonner" à une URL il suffit d'ajouter un IntentFilter sur l'activité Android qui doit la recevoir. Il est possible de le configurer de cette manière :

  • Categories : on indique Browsable pour être appelé depuis un navigateur et Default pour recevoir les intents implicites.
  • DataScheme : il faut préciser le protocole utilisé qui est donc http ou https (il faut créer deux IntentFilter pour gérer ces deux cas).
  • DataHost : le nom d'hôte utilisé par le site web ciblé.
  • DataPathPrefix : utilisé pour ne pas cibler le site en entier mais uniquement une sous-partie de celui-ci. Il est possible de mettre "/" comme valeur. 
  • Autoverify : mettre true si vous possédez le site, false sinon. Nous reviendrons dessus plus tard.

Dans l'exemple ci-dessous, on ciblera toutes les urls commençant par https://blog.infinitesquare.com/switch :

[IntentFilter(new[] { Intent.ActionView },
              Categories = new[] { 
                   Intent.CategoryBrowsable, 
                   Intent.CategoryDefault },
              DataScheme = "https",
              DataHost = "blog.infinitesquare.com",
              DataPathPrefix = "/switch",
              AutoVerify = false)]

En Xamarin.Forms, cet attribut est à poser sur l'activité principale (MainActivity). 

Je le fais ici sous la forme d'attribut en Xamarin mais vous pouvez aussi déclarer tout cela directement dans votre manifest : 

 <intent-filter android:autoVerify="false">
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.BROWSABLE" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:host="blog.infinitesquare.com" />
    <data android:pathPrefix="/switch" />
    <data android:scheme="https" />
</intent-filter>

Récupération de l'URL

Si l'utilisateur choisit votre application pour ouvrir l'URL, alors votre activité Android sera appelée et l'url d'origine sera directement portée par l'Intent. 

protected override void OnCreate(Bundle savedInstanceState)
{
     var receivedUrl = Intent.Data;
}

En Xamarin.Forms, à chaque déclenchement d'ouverture via une URL ciblée, la méthode OnAppLinkRequestReceived de votre classe App sera appelée : 

protected override void OnAppLinkRequestReceived(Uri uri)
{
    var uriAsString = uri.OriginalString;
}

Ouvrir automatiquement l'application

Si vous êtes l'heureux propriétaire du site ciblé, il est aussi possible de configurer votre application pour être ouverte automatiquement sans même laisser le choix à l'utilisateur. Pour cela, il faudra générer un fichier d'association (Digital Asset Links) à placer sur votre site web à cet emplacement en HTTPS uniquement :  https://<yoursite>/.well-known/assetlinks.json.

Le moyen le plus simple de générer ce fichier d'association consiste à lancer Android Studio sur une app Android vide et d'utiliser l'assistant de génération de liens d'applications caché dans le menu "Tools > AppLink" (attendez bien que toutes les tâches Gradles soient terminées pour le voir apparaître !). L'assistant est très simple d'utilisation et se passe d'explications :

Capture d’écran 2019-08-23 à 09.04.27.png

Capture d’écran 2019-08-23 à 09.48.41.png 

Un des autres avantages de cette association est de pouvoir être reconnu par le gestionnaire de mot de passe Android (SmartLock) comme le site web. Ainsi, si le mot de passe est déjà connu pour le site web, il sera aussi proposé à l'utilisateur dans votre application.

 

Happy coding !

Photo de profil

Ces billets pourraient aussi vous intéresser

Vous nous direz ?!

Commentaires

comments powered by Disqus