Dot.Blog

C#, XAML, Xamarin, UWP/Android/iOS

Xamarin.Forms : Lancer d’autres Apps par un URI

Chaque OS a ses mécanismes pour lancer une App depuis une autre éventuellement en lui passant des paramètres. Mais qu’en est-il depuis Xamarin.Forms ?

Les “URI Scheme”

Les “Schémas d’URI” sont des URI comme on en utilise sur le web. Sur ce dernier on doit indiquer le protocole puis un nom de domaine, etc, vous connaissez.

Pour lancer des Apps depuis des Apps il existe dans chaque OS des mécanismes propres. UWP utilise les URI, mais d’autres procédés sont utilisés ou préférés sur Android et iOS en natif tout en supportant tout de même le concept d’URI. Sous Xamarin.Forms nous essayons toujours d’utiliser le dénominateur commun pour conserver le code le plus cross-plateforme possible et c’est ainsi que les URI se trouvant supportés par les trois OS les plus importants ce sont eux que nous utiliserons pour naviguer vers d’autres Apps.

Pour rappel un URI (et non “une”) est le signe de Uniform Resource Identifier, soit, “Identifiant de Ressource Universel” (IRU en français mais presque jamais utilisé).

Si vous êtes un peu comme moi et que la plomberie réseau n’est pas votre tasse de thé, que vous ne sautez pas de joie en entendant le mot protocole par exemple, alors il y a des chances que vous ne soyez pas totalement au point avec la nuance entre URI, URL et URN. Alors je vais fixer les choses en quelques mots car pour les détails je renvoie les passionnés de la chose à leur outil de recherche préféré.

URI : Elle permet d’identifier une ressource de façon permanente même si cette dernière change de place.

URL et URN sont des URI. Mais l’URL (Uniform Resource Locator, Localisateur de Ressource Universel) en plus d’identifier une ressource (sur un réseau le plus généralement) permet d’obtenir une représentation de la ressource en décrivant son mode d’accès. Une adresse web est un URI qui identifie bien une ressource de façon universelle tout en impliquant une représentation de cette ressource (au format HTML) et en précisant le protocole qui sera utilisé pour un échange (le fameux http en début d’URL).

Les URN quant à eux sont des Uniform Resource Name, Nom de Ressource Universel, des URI qui permettent d’identifier une ressource par son nom à l’intérieur d’un espace de noms. L’URN permet de référencer une ressource sans pour autant fixer son emplacement ni la méthode pour y accéder. L’URN est un concept plus abstrait que l’URL qui est utilisé dans le monde réel pour obtenir des ressources, les manipuler etc… Par exemple un URN valide pourrait-être isbn:978-1-36-734396-2, identifiant d’une ressource de type livre suivant la numérotation de l’International Standard Book Number, ISBN, et pas n’importe quel livre puisqu’il s’agit du mien sur les Xamarin.Forms… Grâce à ce numéro vous pouvez faire référence de façon universelle à ce livre, mais l’URN ne dit pas comment il est possible d’obtenir cette ressource (en suivant le lien en haut à droite du Blog !).

Bon voilà pour les clarifications.

Vous comprenez maintenant pourquoi on parle d’URI et non d’URL ou d’URN (même si on pourrait se dire qu’un URN pour désigner une App serait pas mal. Mais il manquerait d’autres informations, la façon d’y accéder, les paramètres à passer etc).

Le fameux “schéma URI” est celui qui est enregistré dans l’OS par une App pour qu’on puisse l’appeler de l’extérieur. L’idée est celle représentée par le … schéma ci-dessous :

image

L’exemple donné ici est celui de Skype. Lorsqu’il s’installe sur la device il va indiquer à l’OS un schéma URI appelé “Skype”. Si vous voulez passer des informations à Skype il faudra envoyer à la plateforme (via une API particulière) un schéma URI compatible de type : skype:// suivi de l’information supportée par ce schéma, ici le numéro de téléphone Skype de la personne à appeler par exemple (skype://555-1111 dans le schéma ci-dessus).

Voilà, on a beaucoup rit, pour ma part des pustules commencent à pousser de partout je n’y peux rien c’est allergique. Donc c’est dit, on n’y reviendra plus. Ce qui va nous intéresser c’est de savoir comment on se sert de ce truc…

Ouvrir une App externe

Ca va être court… Il suffit d’utiliser :

Device.BeginInvokeOnMainThread(() =>
{
    Xamarin.Forms.Device.OpenUri(new Uri("skype://555-1111"));
});

On peut aussi utiliser MainThread des Xamarin.Essentials pour faire l’invocation sur le Thread principal, cette librairie étant même installée par défaut par certains templates.

Et c’est tout ?

Il me semble…

Enfin reste un détail : connaître l’URI de l’application à appeler !
Il existe une sorte de registre des URI “officielles” (car de nombreuses Apps doivent exposer des URI sans avoir enregistré ces dernières dans un registre international), il est ici : https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml

Même si cette liste est partielle, elle peut aider.

On y retrouve par exemple l’URI de Skype utilisée dans mes exemples plus haut ainsi que des informations essentielles comme le template (certains template ne sont pas indiqués mais la plupart y sont). Pour Skype donc le template est :

(last updated 2012-09-12)

Resource Identifier (RI) Scheme name: skype
Status: provisional

Scheme syntax:
   skype:<username|phonenumber>[?[add|call|chat|sendfile|userinfo]]

Scheme semantics:
   Launching Skype call (unofficial; see also callto:)

Encoding considerations:
   Unknown, use with care.

Applications/protocols that use this scheme name:
   See official documentation from Skype website.

Interoperability considerations:
   Unknown, use with care.
Security considerations:
   Unknown, use with care.
Contact:
   Registering party: Alexey Melnikov <alexey.melnikov&isode.com>
   Scheme creator: Skype
Author/Change controller:
   Either the registering party or someone who is verified to 
   represent the scheme creator.  See previous answer.
References:
   http://en.wikipedia.org/wiki/Skype, 
   http://www.skype.com/share/buttons/advanced.html 

(file created 2012-09-12)

Une fois l’URI connu et le template en poche il devient plus évident de se servir de ce mécanisme.

Conclusion

Il est souvent intéressant de s’ouvrir à l’extérieur, on s’intègre mieux à un écosystème et on s’enrichit, on se rend plus indispensable aussi, et ce qui est valable ici pour un humain l’est aussi pour une App… Si vous gérer des contacts dans votre App, prévoir par une option de pouvoir passer un appel Skype ne coûtera pas grand chose (une ligne de C# et un bouton dans l’UI) et tout de suite votre App deviendra vite indispensable à ceux qui utilisent souvent Skype sur les mêmes contacts que ceux manipulés par votre App.

Le bonheur c’est simple comme un coup de fil disait une pub des années 80 pour France Telecom… Le bonheur de vos utilisateurs peut être simple comme un URI…

Pensez-y !

Mais pour ne pas rester coincé dans vos méditations ….

Stay Tuned !

blog comments powered by Disqus