30 janvier 2017

Article

Technologies de l'information

Le développeur Xamarin et iOS 10

Depuis les débuts de Xamarin, du temps où le « framework » de développement mobile s’appelait Monotouch, la compagnie se fait un point d’honneur de coller au plus près des mises à jour d’Apple. Elle n’a pas fait défaut pour iOS 10 puisqu’on a eu accès à une version bêta dès juin, puis au mois de septembre le nouveau SDK était publié.

Le développement mobile sur Xamarin

Xamarin a une place un peu particulière dans l’écosystème du développement mobile. Contrairement à d’autres solutions cross-plateformes, la couche UI n’est pas partagée entre iOS et Android. On la développe en C#, mais en utilisant les API natives : UIButton dans un XIB et Button en AXML respectivement. Le reste de l’application se développe ensuite dans des projets PCL classiques. Au moment de la compilation (Ahead of Time, AOT), le code machine ARM compatible avec les machines iOS est généré au lieu de produire du code IL comme avec les applications .NET classiques.

Ce dessin explique le support natif des trois plateformes, iOS, Android et Windows Universal :

Figure-1-plateformes-Web

Petite précision : Xamarin a un autre produit, Xamarin Forms, qui permet de définir l’interface utilisateur une seule fois. La solution se base sur le langage XAML, initié par Microsoft du temps de WPF et Silverlight.

Les nouveautés iOS 10 pour Xamarin

Comme la nouvelle version du système d’exploitation contient beaucoup de nouveautés, je vais me concentrer sur 3 nouvelles API du système. Les illustrations de cet article sont issues de la documentation officielle (et très complète) de Xamarin.

SiriKit

Siri se passe maintenant de présentation. Premier assistant personnel intelligent populaire, il a été intégré dans le système d’exploitation de la firme californienne en 2011. Il permet de répondre à des requêtes en langage naturel émises vocalement par l’utilisateur. Depuis, il a été intégré dans macOS et tvOS.
Jusqu'à iOS 10, Siri n’était pas accessible aux développeurs tiers. Apple a publié en juin dernier un SDK qui contient SiriKit, une première forme d’intégration pour les apps.
Les API sont limitées à des domaines bien particuliers et donc seules les extensions des apps supportant ces domaines sont autorisées : appel vidéo ou audio, réservation de transport, gestion d’un entraînement sportif, messages, recherche de photos, réception ou envoi d’argent.
Les apps doivent fournir une Intent Extension pour supporter SiriKit, le UI étant optionnel puisque Siri va par défaut le gérer.

Pour pouvoir interagir avec Siri, l’app extension doit fournir plusieurs choses : 

Figure-2-Siri

1. Le vocabulaire

Prenons le cas d’une app de messagerie et la requête formulée irait comme suit : « Hey Siri, envoie un message à Claire ». Siri n’a bien sûr pas Claire dans sa base de données, c’est pourquoi l’app va exposer une liste de contacts comme vocabulaire et Siri pourra alors répondre « Que voulez-vous dire à Claire? » Le vocabulaire peut être spécifique à l’utilisateur ou partagé (une liste d’exercices, par exemple, pour une app d’entraînement).

2. Logique pour traiter la requête

Après que l’utilisateur a énoncé son message, Siri envoie un Intent à l’application. L’Intent va contenir la requête structurée. L’application doit valider les paramètres de l’Intent comme, dans notre exemple, le nom du contact. S’il y a ambiguïté sur celui-ci, l’app peut demander une confirmation : « Voulez-vous envoyer un message à Claire Dupont ou Claire Contoso? »

L’app doit alors confirmer à l’usager si la demande peut être traitée et sinon, pourquoi. Dans notre exemple on peut afficher une confirmation « J’envoie un message à Claire Dupont... » ou demander plus de détails : « Claire Dupont n’a pas de numéro de téléphone associé, à quel numéro dois-je l’envoyer? ».

3. Retourner une réponse

L’app va retourner une IntentReponse avec des informations propres aux domaines. L’utilisateur peut alors confirmer l’action ou non. Xamarin offre un exemple complet d’implémentation de SiriKit.

Message App Extensions

Les applications de messagerie instantanées sont maintenant très populaires, et ce, partout dans le monde. Whatsapp, Line, WecChat, Facebook Messenger, Viber, chacune a son marché de prédilection, mais les 5 continents sont concernés.

Cet attrait a forcé Apple à revoir iMessage, son app native de messagerie. Celle-ci permettait d’échanger des messages entre appareils iOS et OSX, mais aussi des SMS vers des téléphones d’autres systèmes. La nouvelle version permet maintenant d’envoyer des messages plus interactifs et s’ouvre aussi aux programmeurs tiers.

Les applications peuvent fournir un pack de Stickers (images générées par l'application) ou présenter une interface personnalisée pour composer un message. Par exemple, l’application Airbnb permet de consulter et de partager des propriétés directement depuis iMessage :

Figure-3-iMessage

Comme dans d’autres points d’intégration d'iOS, le développeur doit fournir une Message App Extensions. Celle-ci peut être attachée à une app existante ou être indépendante. En effet, il y a un store dédié aux extensions pour iMessage. Il existe deux modes de composition : compact, lorsque l’utilisateur tape dans le textfield de message ou plein écran, pour afficher un UI plus complexe.

Figure-exemple-application 

Comme on le voit, l’app peut contenir du contenu riche : titres, image, vidéo, etc.

Figure-5-exemple-application

Pour les appareils ne supportant pas les messages riches (c’est-à-dire ceux toujours sous OS8 ou watchOS 2), une URL sera partagée.

CallKit

On ne présente plus la VOIP, la voix sur IP. Popularisée par des applications comme Skype sur les ordinateurs de bureau, son usage a là aussi explosé avec les téléphones intelligents. Après une résistance chez certains opérateurs téléphoniques, ce mode de communication est maintenant bien supporté.

Avant iOS10, si une app offrait la VOIP, l’expérience utilisateur était sous-optimale. Lorsque l’app recevait un appel, ce dernier prenait la forme d’une notification perdue au milieu des autres. Si en plus le téléphone était verrouillé, alors l’utilisateur devait saisir son code ou TouchId avant de répondre.

Avec iOS10 et CallKit, les applications de VOIP auront la même expérience utilisateur qu’un appel natif, avec, par exemple, juste un mouvement de glisser pour répondre quand l’appareil est verrouillé.

Dans ce schéma, on distingue les deux principaux composants de l’intégration CallKit :

Figure-6-CXProvider

CXProvider permet à l’app de signaler au système un nouvel appel entrant ainsi que sa conclusion.
CXCallController permet quant à lui de signaler qu’un appel sortant VOIP est en cours. Cela permet, en cas d’un appel téléphonique entrant, de mettre en pause l’appel VOIP.

Prenons par exemple le cas d’un appel entrant : 

Figure-7-exemple-schema-app

  1. L'app reçoit une notification d'un appel entrant dans son système.
  2. L'app envoie, via le CXProvider, un CXCallUpdate pour l'informer de cet appel.
  3. Le système publie l'appel à l'utilisateur via le UI dédié et aux autres apps de VOIP.

Plus sur Xamarin et iOS 10

Nous avons survolé seulement 3 des nouvelles API accessibles aux développeurs iOS. Avec Xamarin, vous pouvez en profiter pleinement dès maintenant dans vos applications C#. Je vous invite à consulter la page consacrée à la nouvelle version sur le site de Xamarin. L’éditeur a aussi un site contenant des recettes de code pour les différentes API : c’est une mine d’or pour tester rapidement des fonctionnalisés du système mobile.

Vous souhaitez en apprendre plus sur le sujet ? Retrouvez-moi lors de la formation « Introduction au développement d’applications mobiles sur Xamarin » (DE335) chez Technologia.

Matthieu Guyonnet-Duluc possède une expertise de plus de 14 ans en développement de logiciels, en France et au Québec. Il a commencé sa carrière dans le développement d’applications web d’entreprise dans le domaine de la relation clientèle avec Java avant de poursuivre son aventure dans le monde du conseil. Curieux des technologies mobiles, il s’est joint à Apcurium en 2012, en tant qu’architecte logiciel et est également chef d’équipe des développeurs d’applications Xamarin.