Introduction

Le choix de faire du développement natif quand on a un projet mobile n’est plus si évident. Avec l’avènement des PWA et des solutions multi-plateforme, la question est légitime : Que justifie le développement sur deux OS (à minima) quand on pourrait mutualiser une grande partie du code pour toutes les destinations ? De plus en plus de fonctionnalités du terminal sont accessibles par un navigateur web, comme la caméra, la détection d’empreintes ou la réalité augmentée.

Cet article a pour objet de faire un état des lieux de toutes les possibilités offertes par Android et iOS et montrer toute la valeur ajoutée du développement natif mobile. On se focalisera évidemment sur les dernières fonctionnalités présentées cette année par Android Pie et iOS 12.

Si quelques indications techniques sont offertes pour éclairer la façon d’implémenter ces différentes fonctionnalités, l’article n’a pas une visée purement technique. Il est destiné à inspirer chacun, PO comme designer, sur tout ce qui est faisable sur une plateforme mobile et qui pourrait servir à étendre les fonctionnalités de nos applications futures.

Tour d’horizon sur iOS 12 par Gunjin Udval

En septembre dernier, Apple présentait iOS 12 à la WWDC. On a constaté les efforts fournis pour mettre l’accent sur une expérience seamless entre les applications et l’OS du téléphone. Présentons rapidement les nouveautés d’iOS 12 qui œuvrent à unifier l’expérience utilisateur sur mobile. Avec 63% d’adoption du nouvel OS par les appareils vendus depuis 2014 et 60% d’adoption par tous les appareils, en date du 29 octobre 2018 (donc en moins de deux mois), on peut affirmer avec confiance que ces nouveautés touchent une majorité du public Apple. Un peu de lecture est proposé à la fin de chaque catégorie au cas où vous auriez envie d’approfondir le sujet.

Siri Shortcuts

Siri gagne en fonctionnalités cette année, et va au-delà du simple assistant vocal.

On pouvait auparavant exposer un raccourci de l’application avec une commande vocale définie et utilisable par Siri (depuis iOS 10).

Cette année, l’intégration de Siri devient plus fluide avec Siri Shortcuts. L’application mobile peut maintenant présenter des fonctionnalités à Siri, dont l’utilisateur choisit les commandes vocales lui-même.

Les raccourcis de Siri pourront ainsi être utilisés dans plusieurs endroits : les suggestions de Siri sur l’écran de recherche, sur l’écran verrouillé, et sur l’Apple Watch. Plus on utilise les raccourcis, plus Siri apprend les habitudes de l’utilisateur et les lui présente au moment opportun, en fonction de sa localisation, de l’heure, de son activité… Présenter une fonctionnalité très utilisée de l’application en raccourci fluidifie l’expérience utilisateur en lui évitant un parcours quotidien répétitif.

Comment ?  Pour exposer une fonctionnalité à Siri, il suffit d’exposer l’application avec un intentHandler qui déclenche l’action voulue. La première fois que l’utilisateur découvre une fonctionnalité pour laquelle le développeur a créé un raccourci, l’application va donner ce raccourci à Siri. A partir de ce moment, le raccourci est accessible pour l’utilisateur. Un bouton et un écran natifs sont disponibles pour personnaliser la commande vocale, et on n’a qu’à laisser Siri gérer le reste.

Notons également l’arrivée de l’application Shortcuts (anciennement Workflows, depuis racheté par Apple), qui pousse la personnalisation encore plus loin. L’utilisateur peut créer des routines, c’est-à-dire un parcours d’actions exposées par des applications, déclenchable avec une commande vocale personnalisée. On peut trouver des exemples de routines sur Reddit, dont le plus connu est “Siri, I’m being pulled over” (“Siri, des policiers me demandent de me ranger”) qui arrête la musique, met le téléphone en silencieux et déclenche la caméra frontale.

Des notifications plus riches

Les notifications personnalisables sont maintenant disponibles pour toutes les applications. Elles peuvent contenir des champs de texte, des sélecteurs de date, des boutons, à la manière des notifications de Messages. Si l’UI des notifications était customisable depuis iOS 10, les éléments interactifs ne sont disponibles que depuis iOS 12.

Les notifications peuvent utiliser toutes les données locales de l’application. Il est recommandé de n’utiliser que des données disponibles immédiatement, et non de faire des requêtes avant d’afficher une alerte.

Comment ? Pour cela, il faut créer une extension de l’application dédiée à la notification personnalisée. Il peut exister plusieurs extensions de notifications au sein d’une même application. Dans chaque extension, une vue et un ViewController sont dédiés à la notification, à la manière des écrans classiques. Chaque extension de notification est identifiée par son UNNotificationExtensionCategory, une chaîne de caractères passée en argument au moment d’envoyer la notification.

ML Kit, le kit de Machine Learning d’Apple

ML Kit présente tous les outils nécessaires pour faire du machine learning sans connaître toute la théorie des réseaux neuronaux. Le kit comporte des modèles de machine learning de base et des frameworks pour faire du NLP (natural language processing), de la reconnaissance visuelle, ou de l’évaluation d’arbres décisionnels (GameplayKit). Quelques lignes de code suffisent pour implémenter son modèle et l’entraîner au sein de son application. L’utilisation de Metal promet une grande performance avec peu de consommation de CPU.

La documentation officielle est très claire et pédagogique, n’hésitez pas à y jeter un œil.

ARKit 2, plus de profondeur, plus de fonctionnalités

ARKit a fait du chemin depuis son annonce en 2014. Les iPhone 7 et plus récents peuvent bénéficier de la technologie de la réalité augmentée. Comme d’habitude, le kit est très facile à prendre en main et on peut créer des scènes de réalité augmentée en quelques minutes, sans connaissances préalables du sujet. L’exemple qu’on voit en vidéo ci-côté traque une image stockée en ressource et lit une vidéo par-dessus. Le tracking est de très bonne qualité, les scènes peuvent facilement être manipulées, sauvegardées et partagées (à plusieurs appareils, par exemple).

Nouveauté annexe : la détection des profondeurs avec la caméra de l’iPhone 8 et plus récent. La technologie TrueDepth permet de reconstituer la 3D à partir d’une photo par exemple, ou de créer des masques de profondeur sur des photos. On peut voir des exemples d’utilisation dans ces repos Github : TrueDepth et AR Kit.

NB : le projet de l’application AR en vidéo ci-contre se trouve sur le Gitlab interne, à cette adresse. On trouve tout le code nécessaire pour la scène dans l’unique ViewController du projet.

Health Kit

HealthKit a également bénéficié d’améliorations pour ce nouvel OS. Pour rappel, le Kit permet d’utiliser les données de l’application Santé qui concernent l’activité, le sommeil et les mesures de son utilisateur. Les éditeurs tiers d’applications et d’appareils de santé peuvent écrire et lire des données de Santé, avec l’accord préalable de l’utilisateur.

Un timide onglet médical fait son émergence et devrait voir son utilisation augmenter. Pour information, le possesseur de l’iPhone peut y indiquer sa condition physique, ses maladies ou traitements éventuels, et cette fiche médicale est disponible sur l’écran verrouillé. Le cas échéant, un médecin peut être déclaré et celui-ci peut mettre à jour le dossier de son patient. A terme, Apple a pour ambition de créer un véritable passeport médical avec le soutien du réseau de la santé, ce qu’on a pu constater avec les fonctionnalités de la dernière Apple Watch.

Un désavantage notable par rapport à Google Fit est à noter : les données ne sont pas associées au compte iCloud de l’utilisateur de l’iPhone, et sont donc stockées seulement en local dans le téléphone.

Nouveautés Android 9 par Roxane Alibert

Android 9 (Pie de son petit nom) est sorti le 20 Août 2018. A l’heure où j’écris ces lignes, la mise à jour commence peu à peu à être déployée sur les différents téléphones.

Cette mise à jour s’accompagne d’un lot de nouveautés qui vont aussi bien intéresser nos PO, nos designers et bien entendu les développeurs.

Position intérieure

Android 9 permet d’avoir accès à la position du téléphone à l’intérieur des immeubles. Depuis quelques années, Google cartographie l’intérieur de certains bâtiments, comme les centres commerciaux ou les musées. Il est maintenant possible de se repérer dans ces lieux grâce aux réseaux wifi environnants. En effet, grâce à la norme wifi IEEE 802.11mc, aussi connue sous le nom de wifi RTT, pas pour Réduction du Temps de Travail mais pour Round-Trip-Time.

L’appareil doit trouver au moins trois points d’accès wifi pour pouvoir avoir une position fiable. Il n’a pas besoin de s’y connecter et la position de l’appareil ne sera pas partagée avec le routeur wifi. Une fois ces points d’accès localisés, il « suffit » de faire un algorithme de triangulation pour trouver la position de l’utilisateur. On peut atteindre une précision d’un à deux mètres.

Côté tech 

Du côté développement, pour voir les points d’accès à proximité, il faut lancer une requête de type « RangingRequest ». Les résultats du scan sont stockés dans un objet « ScanResult ». A partir de ce résultat, on peut savoir quelle mesure a réussi et quelle distance (en millimètres) nous sépare du routeur.

Encoches

Les encoches peuvent être affichées sur certains appareils, soit en haut, soit en haut et en bas de l’écran. On peut y cacher des menus, ou des loaders par exemple. La fonctionnalité n’est disponible que sur peu d’appareils. Elle dépend du device. On peut voir deux exemples ici, sur des Google Pixel 3.

On peut simuler les encoches sur tous les appareils via le mode debug des appareils sous Android 9 et sur le simulateur.

Notifications

Les notifications sur Android 9 ont été enrichies et le support pour les conversations a été amélioré. On peut maintenant afficher des photos directement dans la notification ainsi qu’intégrer des actions et des smart reply si nécessaire.

Côté tech 

Pour les conversations dans les notifications, une classe « Person » a été créée, elle inclut les informations des contacts (photo, nom…).

Un extra peut être utilisé par l’application pour utiliser le brouillon écrit par l’utilisateur, si ce dernier ferme la notification par inadvertance.

Depuis Android 9, les channels de notifications ont été simplifiés. On peut donc maintenant créer des groupes de notifications et l’utilisateur pourra bloquer directement chacun de ces groupes.

De nouvelles règles de notifications ont été mises en place, notamment pour empêcher la notification d’ouvrir une application en grand écran, bloquer la LED de notification, empêcher les notifications de glisser furtivement dans la vue…

Médias

Support de plusieurs capteurs photos simultanément 

Pour les mobiles ayant des double appareils photos (que ce soit des appareils frontaux ou de l’arrière), Android 9 supporte maintenant l’accès à ces doubles flux d’images simultanément. D’autres améliorations permettent de réduire le temps de première prise et laissent le client gérer divers cas sans avoir besoin de stopper et redémarrer l’appareil photos. Android 9 supporte également les appareils photos externes sur les devices compatibles.

Animations 

Android 9 introduit une classe pour gérer les images animées GIFs et les images WebP. Cette classe est nommée AnimatedImageDrawable et elle permet de ne pas décoder l’image animée sur le thread UI, ce qui ajoute de la fluidité à l’application.

Support des vidéos HDR et images HEIF (High Efficiency Image File) 

Sur les appareils compatibles, Android 9 permet de lire des vidéos HDR depuis YouTube ou PlayMovies.

Réseau neuronal

L’API réseau neuronal a été introduit sur Android 8.1 (API 27). L’API 28 d’Android améliore et accélère le machine learning sur les appareils. Android 9 supporte neuf nouvelles opérations. Pour plus d’informations sur les réseaux neuronaux sur Android : https://developer.android.com/ndk/guides/neuralnetworks/

Authentification biométrique

Sur Android 9, le système propose une authentification unifiée qui lorsqu’on l’utilise, affiche la méthode d’authentification choisie par l’utilisateur (empreintes digitales, lecture d’iris ou de reconnaissance faciale).

Rotation de l’écran

Android 9 ajoute un mode pour gérer la rotation de l’écran dans la barre système. L’utilisateur peut ainsi choisir sil veut changer l’orientation de l’écran et cela permet d’éviter les rotations involontaires.

ARCore

ARCore permet de simplifier le développement des interactions entre le monde réel et les objets en réalité augmentée. Le SDK permet de simplifier la reconnaissance de l’environnement, l’estimation de l’intensité de la lumière, les interactions des utilisateurs, les images en réalité augmentée. On peut également partager les points d’ancrage des objets (utiles pour un jeu ou une application multi-joueurs en réalité augmentée).

Conclusion

Faire du développement natif se remarque dans les détails, mais ce sont les détails qui font aussi qu’une application est agréable à utiliser. Apple a présenté un talk sur les Fluid Interfaces qui visent à maximiser la fluidité des gestes sur un écran tactile. On trouvera un résumé de ce talk et des cas pratiques à cette adresse (je vous recommande chaudement cet article, à la limite entre le design et le développement). L’utilisateur mobile est exigeant, il veut l’instantanéité et la fluidité maximales, mais il est aussi volatile, car il peut changer d’avis au cours de son geste (faire glisser son doigt vers l’extérieur d’un élément, puis revenir pour le re-sélectionner). Ces gestes sont supportés nativement mais il serait compliqué d’essayer de les implémenter d’une autre manière.

On utilise souvent des applications multi-plateforme sans les reconnaître, comme Pinterest. Mais on reconnaît aussi les applications natives, comme Citymapper, car ce sont celles qui adoptent le plus vite et le mieux les fonctionnalités natives les plus récentes. Les fréquentes mises à jour des OS contraignent souvent les librairies multi-plateforme à s’y adapter, ce qu’elles font avec un délai non négligeable, sans compter que ce sont souvent des frameworks maintenus par des communautés de développeurs.