Profitez des offres Memoirevive.ch!
Automatisation sous iOS: url-schemes et x-callback-url

On parle beaucoup d’interactions entre les applications sous iOS. Surtout pour s’en plaindre.

Je souhaite aborder ces interactions dans cet article. De leurs limitations, mais aussi d’une manière simple et très puissante de faire interagir des apps, avec plus ou moins de limitations suivant les cas.

Disons-le franchement : il y a un (tout petit) peu de travail pour profiter de ce que je vais vous présenter. Un tout petit peu. Mais ce qu’on peut en tirer est vraiment intéressant, et permet de créer des interactions entre différentes applications qui ne se connaissent pas. Le genre de flexibilité qui fait bizarre sous iOS.

Mais avant, une petite explication sur le fonctionnement d’iOS.

Sandboxing

Le sandboxing est manière d’isoler des applications. Ou n’importe quoi d’autre d’ailleurs. Littéralement, on peut traduire ça en “bac à sable”. Il s’agit de contraindre des apps à travailler dans un environnement cloisonné. Cloisonné ne veut pas pour autant dire totalement fermé sur le monde : depuis son bac à sable, une app peut se voir offrir des accès à des services du système tels que le presse-papiers, l’agenda, les contacts, les photos, etc.

Le mot important ici, c’est “service”. Lorsqu’une app veut accéder à une ressource hors de son bac à sable, elle doit passer par un service. Pour résumer (pardonnez le raccourcis), un service est une interface technique que le code d’une app utilise comme nous utilisons une interface graphique. Par exemple, pour sauvegarder une photo dans l’album de l’utilisateur, une app va demander au service des photos : sauve cette image dans l’album dont le nom est Vacances. Ce n’est pas elle qui va créer un dossier avec le nom qui va bien, au bon endroit sur le support de stockage, et y enregistrer le fichier. Elle demande à ce que le composant spécialisé dans la sauvegarde des photos fasse son travail, et celui-ci est responsable de l’organisation de ce travail. Après cette requête, l’app Photos affichera une photo de plus dans l’album de vos vacances.

Le second mot-clé : “responsable”. La responsabilité du travail est séparée de manière à ce que chacun fasse ce qu’il sait faire le mieux. Passer par cette interface technique assure à l’app qui gère les photos que personne d’autre qu’elle ne va triturer son organisation interne. Cette séparation des responsabilités est un principe très important en informatique… et son application est indispensable au bon fonctionnement d’un système dès qu’il devient un peu complexe.

Le passage par des services implique aussi une autre contrainte importante : si une app n’offre pas de service pour une action donnée, les autres apps ne peuvent pas en profiter. Reprenons notre exemple : Imaginons que le composant qui publie le service des photos n’offre pas la possibilité de choisir le nom de l’album où l’on veut sauver la photo (juste pour l’exemple, parce qu’en vrai, on peut), toutes les apps ne pourront sauvegarder d’images que dans l’album par défaut. On comprend vite la raison pour laquelle le sandboxing peut être limitant pour les applications présentes sur le système.

url-schemes et x-callback-url : la théorie

Revenons maintenant à ce qu’une app peut offrir à ses camarades: un service. Ce service est disponible dans un format que tout le monde reconnaît: une adresse Web. Enfin pas tout à fait: c’est plutôt une adresse qui ressemble à une adresse Web, mais qui n’utilise pas le protocole http. Chaque app présente sur iOS peut s’inscrire auprès du système et déclarer le point d’entrée de son service. Ce point d’entrée sera utilisé en tant que préfixe pour toutes les URLs de l’app.

Par exemple, l’excellent client pour Twitter Tweetbot répond aux adresses débutant par tweetbot:// (référence). Demander à Tweetbot de poster un nouveau tweet revient à appeler l’URL suivante:

tweetbot://MonCompteTwitter/post?text=Mon_Texte

Un autre exemple: rechercher une entrée dans 1Password pour iOS revient à lancer cette URL (référence):

onepassword4://search/mon_texte

Encore un: il y a quelques semaines, je vous parlais de Pinboard. Je suis vraiment fan de ce système de gestion des signets dans le cloud, et de l’app Pinbook. Pour ajouter un signet à Pinboard, en utilisant Pinbook, c’est facile avec cette URL (référence) :

pinbook:///add?url=http://apple.com&title=Apple&description=Description&private=yes&readlater=no

Jusqu’ici, je vous ai présenté des actions simples: un tap = une action. Maintenant, imaginons que je souhaite écrire un tweet puis revenir à l’application précédente. Ou lier une autre action à la suite de la première. Ou choisir deux actions différentes, suivant si la première action est un succès ou non. La spécification x-callback-url offre ces possibilités. Les applications qui implémentent cette spécification comprennent les attributs suivants: x-success, x-error et même x-cancel, si l’utilisateur annule l’action. Ainsi, on peut indiquer à une action quelle est l’action qui doit être lancée ensuite.

La pratique

Ces URLs sont très pratiques, et faciles à rédiger. Par contre, personne ne veut les taper à la main. Il faut un moyen de les lancer rapidement, et c’est ce point que je vais aborder maintenant.

Tout d’abord, on peut lancer ces URL depuis l’outil le plus évident pour ça: Safari ! Il faut une touche de Javascript, mais on ne s’éloigne pas trop de l’URL vue précédemment. Par exemple pour Pinbook:

javascript:window.location=’pinbook://x-callback-url/add?url=’encodeURIComponent(location.href)‘&title=’encodeURIComponent(document.title)‘&x-source=Safari&x-success=’+encodeURIComponent(location.href)

Une fois que l’URL est enregistrée dans un signet de Safari, il suffit de taper dessus pour lancer l’action. Si l’action est un succès, on revient à la page courante. C’est pas mal, mais on peut faire mieux.

Il existe une app qui est spécialisée dans la création de ces URLs, et leur lancement: il s’agit de Launch Center Pro.

Launch Center Pro

Le principe de Launch Center Pro est de recréer un écran d’accueil iOS, avec des boutons qui ne représentent pas des apps mais des actions. Ces actions sont en fait des URLs comme celles que je viens de vous présenter… et Launch Center Pro offre un moyen assez pratique de créer ces URLs sans se prendre la tête.

Un nouvel exemple, pour illustrer tout ça: nous allons utiliser Articles, un excellent client pour Wikipedia. Le but est de lancer une recherche d’articles en français, dont les titres contiennent un certain mot.

Les images ci-dessus vous montrent comment Launch Center Pro fabrique cette action. L’app découvre les applications installées, et grâce à une base de données online, récupère les actions disponibles pour chaque application.

image image

… L’action de recherche Wikipedia correspond, de manière visuelle, à l’URL suivante:

x-articles://?search=[prompt]&scope=title&language=fr

Remarquez l’élément “[prompt]”: c’est un élément spécifique à Launch Center Pro, qui affiche une boîte de dialogue à l’utilisateur pour entrer le sujet de la recherche. Ce dont on ne se rend pas compte, c’est de la vitesse d’exécution de ces actions. On gagne vraiment du temps, une fois qu’une action est enregistrée. Voyez plutôt:

C’est super pratique. Launch Center Pro permet également d’utiliser un élément “[clipboard]” qui colle le contenu du presse-papiers dans l’URL. Cet élément est utile, par exemple, lorsque l’on copie un passage d’une page Web pour l’envoyer à une application de traduction. Mon Launch Center Pro permet ainsi de traduire ce que je copie vers le français ou l’anglais très rapidement.

Launch Center Pro est une application très riche, que je vous conseille sans hésitation. Elle mériterait à elle seule un article complet, mais ce n’est pas le sujet du jour. Sachez toutefois que les actions qui sont offertes par Launch Center Pro sont nombreuses et très utiles. Quelques exemples d’actions qui sont configurées sur mon téléphone:

  • Envoyer un message à mon épouse
  • Créer un nouveau mail avec la dernière photo enregistrée dans l’album
  • Lancer une recherche Google
  • Allumer le flash (lampe de poche)
  • Lancer une recherche sur Twitter
  • Créer un nouveau Tweet avec le contenu du presse-papiers
  • Créer un nouveau SMS avec le contenu du presse-papiers
  • Rechercher dans Wikipedia en français ou anglais
  • Traduire le contenu du presse-papiers vers le français ou l’anglais
  • Rechercher un mot ou une phrase dans Wolfram Alpha

… et je l’admets volontiers: je ne suis pas le plus créatif des utilisateurs de Launch Center Pro ! :)

Mr. Reader

Mr. Reader est un lecteur de flux RSS. Une app de qualité, avec plein de bons côtés, et quelques mauvais. Globalement très agréable à utiliser. Son point fort, et le lien avec cet article, c’est la possibilité de créer un menu “services” avec des boutons qui vont appeler une URL écrite à l’avance.

Revenons à mon exemple d’avant: je souhaite tweeter un article que je viens de lire. Et pour faire un peu plus envie à mes followers chéris, je vais intégrer une citation au début du tweet.

Je vais aller dans le menu des services de Mr. Reader, et configurer mon action comme cela:

image

Remarquez les éléments [URL] et [TEXT-SELECTED]: ce sont des variables qui seront remplies à la volée par l’app, avec l’adresse de l’article courant, et le texte sélectionné. Mr. Reader permet d’insérer d’autres éléments encore, comme le texte complet de l’article, l’URL raccourcie grâce à un service choisi par l’utilisateur ou encore le nom du site Web.

Tweeter un article depuis mon iPad ressemble donc à ça:

Dans Mr. Reader, j’ai également configuré les actions suivantes:

  • Ajouter un article à Pinboard, avec son URL, et le texte sélectionné en tant que description
  • Rechercher le texte sélectionné dans Wikipedia
  • … en plus de toutes celles qui sont livrées d’office, pour envoyer à Instapaper, partager par mail ou SMS, copier l’URL raccourcie, etc…

Conclusion

Cette présentation n’est qu’un aperçu de ce que l’on peut faire avec ces url-schemes.

En particulier, les applications qui respectent la spécification de x-callback-url peuvent s’enchaîner les unes après les autres, voir même s’appeler elle-même, en fournissant l’action à lancer une fois l’action courante terminée, échouée ou annulée…

Je ne vous cache pas que ce domaine étant relativement jeûne, il n’y a pas encore un standard reconnu. La spécification x-callback-url est assez largement respectée, mais certaines apps (comme Tweetbot) s’en éloignent un petit peu. Si vous utilisez Launch Center Pro, ce problème ne vous regarde pas: l’app s’occupe de ce détail pour vous. Par contre, si vous souhaitez vous lancer dans des actions plus complexes, alors il faudra aller voir les pages de documentations des différentes apps pour éviter les actions qui ne font rien.

Dans mon utilisation, le principal avantage des url-schemes est d’accélérer des tâches que je fais souvent. Et dans cette optique, ces URLs associées à Launch Center Pro rendent de très nombreux services.

Je vous souhaite à tous et à toutes un très bon week-end! :)

... et si vous souhaitez partager des idées d’articles, des liens, des apps, etc… vous pouvez me retrouver sur Twitter.

6 commentaires
1)
6ix
, le 30.03.2013 à 14:04
[modifier]

Il est vrai qu’aujourd’hui ce genre d’interaction relève encore plus de la bidouille que d’un système abouti. C’est toutefois quelque chose qui pourrait voir le jour dans une prochaine version d’iOS; Apple en a déjà posé les bases avec le système de partage et les services XPC (communication entre processus).

Pour l’instant, il faut se contenter des URL schemes et compter sur les développeurs pour qu’ils les implantent dans leurs apps et (surtout) les communiquent.

Vous trouverez une liste de ces URL chez notre ami Akosma ou , par exemple.

2)
Renan Fuhrimann
, le 30.03.2013 à 17:01
[modifier]

Article intéressant sur des possibilités de l’iPad dont j’ignorais totalement l’existence. J’ai toujours cru que iOS c’était fermé, sans possibilités réelles de lien entre les applications/documents. Merci de nous faire découvrir ce genre de choses !

3)
Filou53
, le 30.03.2013 à 18:33
[modifier]

Limpide (ou presque ;-)

Un tout grand merci pour cette explication sur un sujet aussi intéressant.

J’avais déjà lu (mais pas vraiment compris) le principe. Cette fois, cela y est…

Yapluka mettre en pratique :-)

5)
François Cuneo
, le 30.03.2013 à 21:50
[modifier]

Limpide, limpide, ça m’énerve qu’on dise ça parce que j’ai de la peine à suivre, donc ça me vexe un peu!:-)

Je me demande s’il ne faut pas être un bon joueur d’échecs pour créer de belles actions.

C’est marrant, autant j’aime programmer, autant Automator ou ce que tu nous montres ici ne me tente pas vraiment dans la pratique, même si je trouve super qu’on puisse le faire.

Merci pour l’article!

6)
Guillôme
, le 04.04.2013 à 14:21
[modifier]

Sacré article où je découvre une face cachée d’iOS !

Bon après, pour l’utiliser au quotidien, c’est une autre histoire ;)

Merci Sébastien, bel article!