Voilà un titre polémique qui va faire plaisir aux développeurs Android. Les Intents sont un des éléments les plus importants d’Android. Il s’agit des messages permettant aux applications de communiquer entre elles.

Il existe deux types d’Intent : l’Intent explicite qui définit spécifiquement le composant à appeler, et l’Intent implicite qui demande à exécuter une action, le système se chargeant de proposer à l’utilisateur les applications qui lui permettent de réaliser cette action. Pour ma part, c’est ce qui me fait qualifier Android de Bus de Service plutôt que de système d’exploitation.

Les intents implicites sont donc très intéressants, mais ils sont appelés à être banis par les éditeurs. Pourquoi ?

Intérêt des Intents implicites

Le grand intérêt des Intents implicites est de laisser à l’utilisateur le choix de l’application pour exploiter la fonctionnalité demandée. Souvent, cela consiste à choisir son application favorite. Mais cela signifie aussi choisir une action particulière.

Par exemple, si vous prenez le carnet d’adresse et que vous faites un tap sur une adresse, le système va vous proposer l’ensemble de vos applications de cartographie. Voici un exemple de ce qu’il peut vous proposer.

app picker android 4

Exemple de choix d’actions pour une adresse.

Avec Maps, Google Maps (qui est en fait GPS Essentials) ou Earth, vous verrez sur une carte où se situe cette adresse. À vous de choisir si vous préférez une carte (Maps) ou une vue de la terre (Earth). Mais en choisissant Waze, vous choisissez de naviguer vers cette destination. Donc plus que de choisir l’application favorite, les Intents permettent de choisir le devenir de la donnée que vous voulez consulter.

Ceci est le point de vue de l’utilisateur, et l’intérêt est tout à fait évident.

Les intents implicites pour les éditeurs

Qu’en est il du point de vue d’un éditeur d’application ?

Les Intents implicites, c’est bien !

En tant qu’éditeur, vous avez un grand intérêt à utiliser les Intents implicites. Ceux-ci vous permettent de déléguer des fonctions que d’autres composants savent réaliser, vous laissant vous concentrer sur la valeur ajoutée de votre application.

Ainsi, mon application Kipintooch est une application prototype de visualisation des contacts axée sur une présentation des relations entre les contacts. Je ne peux cependant pas négliger qu’en consultant une fiche de contact, un utilisateur souhaite la modifier. Mais créer une Activity pour éditer une fiche (voir en créer) n’a aucune valeur ajoutée par rapport à l’existant et me couterait du temps de développement. Le plus simple est donc d’associer au bouton d’édition un Intent implicite qui demande au système les composants qui peuvent répondre à cette action. Comme il existe une application de gestion de contacts sur tous les terminaux, le système ouvrira au pire l’activité d’édition sur cette application, sinon il proposera les différentes applications enregistrées.

kipintooch action bar

L’édition sous Kipintooch lance un Intent implicite.

Les Intents implicites permettent de décharger des fonctions qui existent déjà et leur permettre de se concentrer sur les fonctions à valeur ajoutée. En tant qu’éditeur, avant de développer une fonction, interrogez vous sur la pertinence de cet investissement par rapport à ce qu’offre la plate-forme.

Les Intents implicite, c’est mal !

Pour un éditeur, l’Intent implicite a un énorme défaut : il laisse à l’utilisateur le choix de l’application qui réalise l’action. En quoi est-ce un problème ?

En tant qu’éditeur, vous voulez que l’utilisateur utilise vos composants. Sur ces composants, vous pouvez par exemple offrir un service en ligne ou avoir de la publicité. Si l’utilisateur choisit une autre application, votre service ne sera pas valorisé ou la publicité ne sera pas affichée. Dans les deux cas, vous perdez financièrement. Ainsi, vous devez, sinon obliger, inciter l’utilisateur à utiliser vos composants.

Est-ce en contradiction avec la plate-forme proposée par Google ? Voyons comment eux fonctionnent.

Illustration avec Snapseed

L’année dernière, Google rachetait Nik Software et par la même occasion, une des apps phare d’iOs, Snapseed. En fin d’année 2012, Google proposait une mise à jour et surtout publiait l’application Android.

Snapseed est avant tout une application de retouche/manipulation d’images très performante (Nik Software oblige). Mis à part ces fonctions métier, l’interface principale propose 4 actions sur iOs.

Actions Snapseed iOs

Les actions avec Snapseed sous iOs.

On remarque 4 actions, dont le partage. Connaissant cette interface, celle d’Android a de quoi surprendre…

Actions Snapseed Android

Les actions avec Snapseed sous Android.

Des 4 actions, des 4 verbes, il n’y en a plus que 3. Google+ est un nom, on ne choisi plus une action, on choisi un produit, un service. Oui, ce bouton Google+ nécessite bien l’app Google+. Si vous ne l’avez pas ou que vous l’avez désactivé, un tap sur ce bouton vous dirige vers le Play Store. Il y a donc bien là un Intent explicite. Mais qu’en est il de la philosophie Android d’utiliser des Intents implicite et laisser le choix ?

En fait, Snapseed laisse le choix. Mais pour avoir ce choix, il faut aller dans le menu et choisir l’option « partager » qui elle va bien proposer l’ensemble des apps capable de gérer ce type de donnée, qui envoi donc bien un Intent implicite. Donc vous pouvez toujours partager avec votre réseau social favori, à raison de 2 clicks supplémentaires.

Snapseed menu

Contenu du menu de Snapseed, d’où on peut parteger du contenu.

On appréciera le soin apporté à l’interface. Snapseed utilise l’Action Bar, un pattern fondamental depuis Android 4. Mais le partage n’est pas proposé comme un Action Button, donc le partage n’est pas considéré comme une « action importante ». Mais l’accès à Google+ oui.

La stratégie pour les éditeurs

Inciter à utiliser ses outils

L’exemple de Snapseed est une excellente illustration du design d’une application. Android est une plate-forme qui se veux respecter la liberté de l’utilisateur. Il faut donc qu’il ai toujours l’illusion de maitriser l’utilisation de son matériel. Mais si en tant qu’éditeur vous avez une fonction à mettre en avant, vous devez fortement inciter l’utilisateur à choisir cette dernière. À l’image de Snapseed, mettez en avant l’accès spécifique à votre composant et rendez le partage générique plus difficile d’accès. L’utilisateur ira toujours vers le plus simple. Bien entendu, soyez honnête : il faut que ce soit claire que l’utilisateur va utiliser une fonction spécifique. En fait, c’est dans votre intérêt, l’utilisateur associe ainsi cette action à votre service.

Ne risquez pas la mise à l’écart de votre application.

Exposer une de ses fonctions uniquement par un intent implicite, c’est aussi courir le risque que l’utilisateur n’utilise plus votre fonction. En effet, si il a plusieurs applications qui peuvent lui convenir, il est possible que via l’app picker, il en impose une. Une qui n’est pas la votre. Et vu le comportement de l’app-picker depuis Android 4, il est fort possible qu’il le fasse.

Les Intents implicites sont donc le meilleur ami et le pire ennemi de l’éditeur. Il peut ainsi déléguer les actions à faible valeur ajoutée et se concentrer sur ses fonctions uniques. Mais les Intents implicite peuvent aussi détourner l’utilisateur de l’app de l’éditeur. Il faut donc les utiliser de manière intelligente, et toujours inciter l’utilisateur à préférer ses fonctions.

Toujours pas convaincu ? Reprenez le cas de l’action suite à un tap sur une adresse. Pourquoi l’app Navigation de Google n’apparait pas ? Et quand on souhaite être guidé à partir de Maps, quel est l’Intent d’exécuté ? 😉

À propos de... Darko Stankovski

iT guy, photographe et papa 3.0, je vous fais partager mon expérience et découvertes dans ces domaines. Vous pouvez me suivre sur les liens ci-dessous.