POC : On a testé Handoff
Au sein du Lab de l’entreprise, nous avons décidé de regarder de plus près un sujet encore peu connu : Handoff.
Pour rappel, Handoff est la technologie lancée en grande pompe par Apple lors de la WWDC 2014. Le thème phare de la conférence : la continuité. Handoff est le nom technique qui se cache derrière cette continuité. Certaines fonctionnalités Handoff sont réservées aux systèmes comme la possibilité de répondre à un appel téléphonique opérateur sur son AppleWatch ou sur macOS, ou encore d’envoyer et de recevoir des SMS opérateur sur macOS. Cependant, Handoff a aussi été ouvert aux développeurs avec des API spécifiques permettant de faire de très belles choses. Ces API donnent la possibilité à une application de commencer une tâche (écrire une note et la continuer dans l’application macOS ou iPad depuis un iPhone).
Le POC
Il faut savoir que l’utilisation de Handoff est restreinte et dépend des prérequis suivants :
- Activation du Bluetooth sur les périphériques
- iOS8.0+, macOS X Yosemite+, WatchOS 1.0+
- Même compte iCloud sur les appareils
- Deux applications qui communiquent entre elles doivent appartenir au même compte développeur.
Pour tester et savoir ce que Handoff a à proposer, nous avons décidé de créer une application simplifiée du Dashboard Linkvalue, regroupant les principales informations. Le but est ensuite d’utiliser Handoff afin de faire communiquer l’application iPhone du Dashboard avec sa version web sur notre Mac.
En effet, sur le papier, Handoff propose une communication et une reprise d’activité :
- App → App
- App → Web
- Web → App
Cependant, après plusieurs recherches et de nombreux tests, nous n’avons pu faire fonctionner Handoff entre une application sur un iPhone sous iOS 9 et +, et une page web sur un Mac. Nous nous sommes rendu compte qu’il n’est uniquement possible de faire communiquer une application avec une deuxième application, sur un autre appareil ou non. Il est également possible de faire communiquer une WebView native d’iOS intégrée à votre application avec un mac.
Nous avons alors décidé de rebondir sur notre idée initiale en cherchant un moyen simple de tester Handoff interapplications.
L’idée en bref : créer une application de prise de notes, avec la possibilité de reprendre la prise de notes sur un autre appareil. Par exemple : vous pourrez commencer votre prise de notes sur votre iPhone dans le métro, et une fois arrivé chez vous, poursuivre la prise de notes sur un iPad pour gagner en confort.
La mise en place de Handoff :
La première étape consistera à définir les “canaux de discussion” de votre application dans son fichier *info.plist*. Ces “canaux de discussion” sont en fait les types d’activité que supportera votre application via Handoff.
Nous créons ensuite l’interface. Celle-ci est simple avec un champ de texte pour le titre de la note et un autre pour son contenu. Nous créons et configurons également une nouvelle *NSUserActivity* qui indiquera quelle activité est en cours depuis les différentes parties de votre application (la fonction *becomeCurrent()* d’une *NSUserActivity* permet justement de switcher entre plusieurs activités dans la même application).
La prochaine étape consiste à override et se servir de la fonction *updateUserActivityState* afin de donner à notre *currentActivity* les informations que nous voulons faire transiter entre les applications. Ici, nous mettrons à jour l’activité avec le titre de la note et son contenu à chaque fois que ces informations sont changées localement dans l’application.
Pour finir, il faudra implémenter dans l’*AppDelegate* la méthode *continueUserActivity*, permettant à notre application de reprendre une activité en cours sur un appareil, depuis un autre appareil. Nous allons alors restaurer l’état de l’activité courante dans l’application venant d’être ouverte, afin de bénéficier de toutes les informations disponibles pour remplir les informations de notre application nouvellement lancée, ou encore de lancer certaines actions. Ici, nous voulons simplement restaurer l’état de notre note sur l’application venant d’être ouverte.
Vous pouvez voir ci-dessous l’exemple du résultat. À gauche, se trouve l’application de note sur l’iPhone 1. Sur la droite, nous pouvons voir l’iPhone 2 avec l’application installée mais non lancée. On voit alors l’icône de notre application de note apparaître en bas à gauche de l’écran de verrouillage. Lorsque nous glissons l’écran vers le haut, nous ouvrons l’application et nous reprenons la prise de notes en cours de route !
Contents du résultat, nous décidons de continuer notre recherche en poussant Handoff un peu plus loin :
Serait-il possible de faire communiquer entre elles deux applications différentes, sur deux appareils différents ? Cette communication interapplications est-elle dynamique et peut-elle être changée à la volée dans l’application ?
Nous avons donc pris deux applications très simples :
La première est notre application de prise de notes vue précédemment. Vous aurez remarqué un bouton “Switch app” en bas de l’application, qui servira à changer de canal de discussion lorsque l’application est en train de fonctionner.
La seconde application est une application très simple, ayant pour seul but d’afficher le titre de la note en cours d’édition sur notre première application.
Cette expérience fut concluante, comme vous allez pouvoir le constater sur les aperçus suivants.
Sur l’exemple ci-dessus, l’utilisateur clique sur le bouton “Switch app” pour passer de l’application de note à l’application “Show-title”. Le changement d’application est répercuté directement sur l’iPhone 2. En effet, nous pouvons voir que l’icône en bas à gauche de l’écran passe de l’application note à notre application d’affichage de titre. Lorsque l’on ouvre cette application, nous constatons que le titre est correctement remplacé.
Les deux iPhones ci-dessus répondent donc à nos questions. Oui, il est possible de faire communiquer deux applications différentes à partir du moment où elles ont été développées avec le même compte développeur. Cela ouvre alors les possibilités de développement. En effet, la possibilité de faire discuter plusieurs applications entre elles est très intéressante, à l’image de Facebook et Messenger par exemple.
De plus, il est possible de changer de “canal de discussion” lorsque l’application est en marche. Ainsi, une application pourra discuter avec elle-même lorsque l’utilisateur est dans une certaine partie de celle-ci, puis pourra discuter avec une autre application lorsque celui-ci se trouve dans une seconde partie de l’application.
Conclusion
Handoff est encore une fois une belle et prometteuse technologie qui pousse l’usage et l’adoption du Bluetooth sur les appareils estampillés de la pomme. Qui dit Apple, dit intégration très fine dans son écosystème. Cela marche sans rien faire. Dommage que nous n’avons pas pu lancer notre application native depuis notre site avec le apple-app-site-association, car nous étions d’accord pour affirmer que ce cas d’utilisation était sans doute le plus intéressant de tous avec Handoff. Espérons qu’il ne s’agissait que d’un bug de notre côté ou d’une régression d’Apple et qu’une solution sera trouvée.
Dans la même thématique, nous vous recommandons la lecture de ces témoignages sur notre blog : iOS et Swift : Retours croisés sur ces indissociables du développement mobile
Nous publions régulièrement des articles sur des sujets de développement produit web et mobile, data et analytics, sécurité, cloud, hyperautomatisation et digital workplace.
Suivez-nous pour être notifié des prochains articles et réaliser votre veille professionnelle.
Retrouvez aussi nos publications et notre actualité via notre newsletter, ainsi que nos différents réseaux sociaux : LinkedIn, Twitter, Youtube, Twitch et Instagram
Vous souhaitez en savoir plus ? Consultez notre site web et nos offres d’emploi.