Créer des extensions SiriKit dans iOS 10

introduction

Depuis que Siri a été introduit en 2011, les développeurs iOS ont demandé la possibilité d’y intégrer des applications tierces. Avec la sortie d’iOS 10 pendant la WWDC 2016, Apple a finalement mis SiriKit à la disposition des développeurs. Il existe encore des restrictions sur les types d’applications qui peuvent tirer parti de Siri, mais c’est un pas dans la bonne direction. Jetons un coup d’œil à ce que nous pouvons faire avec Siri.

Pour en savoir plus sur SiriKit et les autres nouvelles fonctionnalités pour les développeurs dans iOS 10, consultez le cours de Markus Mühlberger, ici sur Envato Tuts +.

Domaines pris en charge

Pour utiliser SiriKit, votre application doit appartenir à un ou plusieurs des domaines suivants:

  • Appels VoIP (par exemple, Skype)
  • Messagerie (WhatsApp)
  • Paiements (Square, PayPal)
  • Photo (photos)
  • Entraînements (Runtastic)
  • Réservation de course (Uber, Lyft)
  • CarPlay (vendeurs automobiles uniquement)
  • Réservations de restaurant (nécessite une assistance supplémentaire d’Apple)

Si votre application n’appartient à aucune de ces catégories, vous ne pouvez malheureusement pas utiliser Siri dans votre application pour le moment. Ne partez pas tout de suite, cependant, car SiriKit est très puissant et il pourrait acquérir de nouvelles capacités à l’avenir!

Architecture d’extension

Une extension SiriKit est en réalité composée de deux types d’extension. Un Intents L’extension est requise et s’occupe de gérer les demandes de l’utilisateur et d’exécuter une tâche spécifique dans votre application (comme démarrer un appel, envoyer un message, etc.).

D’autre part, un IntentsUI l’extension n’est pas obligatoire. Vous ne devez en créer un que si vous souhaitez personnaliser l’interface utilisateur que Siri affiche lors de la présentation de vos données. Si vous ne le faites pas, l’interface standard de Siri s’affichera. Nous allons examiner les deux types d’extensions dans ce tutoriel.

Pour votre information, pendant la WWDC 2016, Apple a publié deux vidéos très intéressantes sur SiriKit. Vous voudrez peut-être les consulter:

Exemple de projet

Nous allons créer une application simple qui traite les paiements via Siri. Le but est de traiter avec succès la phrase «Envoyez 20 $ à Patrick via TutsplusPayments». Le format de la phrase se compose d’un montant d’argent avec une devise spécifique, le nom du bénéficiaire et l’application à utiliser pour terminer la transaction. Nous allons ensuite analyser plus en détail l’intention de paiement.

La configuration initiale

Commençons par créer un projet Xcode standard dans Swift et lui donner un nom. Il y a quelques étapes obligatoires que vous devez suivre avant d’écrire un code pour permettre à votre application d’utiliser les API de Siri.

1. Sélectionnez votre Target> Capacités et activez la fonction Siri. Assurez-vous que les droits ont été créés avec succès dans la structure de votre projet.

Vue des capacités du projet Xcode

2. Ouvrez votre application Info.plist et ajoutez la clé NSSiriUsageDescription. La valeur doit être une chaîne expliquant votre utilisation de Siri qui sera affichée à l’utilisateur lorsqu’il lui sera demandé l’autorisation initiale.

3. Sélectionnez Fichier> Nouveau> Cible. Dans la nouvelle fenêtre présentée par Xcode, sous Extensions d’application, choisissez Extension d’intentions. Sélectionnez également l’option pour inclure une extension d’interface utilisateur. Cela vous évitera d’avoir à créer ultérieurement une autre extension distincte.

Nouvelle cible de l'extension Intents

dans le Info.plist fichier de votre nouvellement créé Intents cible, développez complètement le NSExtension dictionnaire pour étudier son contenu. Le dictionnaire décrit plus en détail les intentions prises en charge par votre extension et si vous souhaitez autoriser l’utilisateur à invoquer une intention lorsque l’appareil est verrouillé.

Insérez les intentions les plus pertinentes en haut si vous souhaitez en prendre en charge plusieurs. Siri utilise cet ordre pour déterminer celui que l’utilisateur souhaite utiliser en cas d’ambiguïté.

Nous devons maintenant définir les intentions que nous voulons soutenir. Dans cet exemple, nous allons créer une extension qui prend en charge l’intention de paiement. Modifier le Info.plist fichier pour correspondre à l’image suivante.

Fichier plist d'informations sur les intentions

Ici, nous spécifions que nous voulons gérer le INSendPaymentIntent et que nous exigeons que l’appareil soit déverrouillé. Nous ne voulons pas que des étrangers envoient des paiements lorsque l’appareil est perdu ou volé!

En relation :  11 des meilleurs endroits pour obtenir l'inspiration de conception de e-commerce

Cible iOS

L’étape suivante consiste en fait à écrire du code dans l’application iOS. Nous devons demander à l’utilisateur la permission d’envoyer sa voix à Apple pour analyse. Nous devons simplement importer le Intents framework et appelez la méthode appropriée comme suit:

La boîte de dialogue résultante présentée à l’utilisateur lors du premier lancement de l’application ressemblera à ceci.

Alerte demandant l'autorisation d'accéder à Siri

C’est tout ce que nous avons à faire dans notre application iOS simple. Entrons maintenant dans le monde des extensions!

Extension d’intentions

Passer au Intents extension que nous avons créée précédemment. Développez son contenu dans le navigateur de projet Xcode. Vous ne verrez qu’un seul fichier nommé IntentHandler.swift.

Ce fichier est le point d’entrée de votre extension et est utilisé pour gérer toutes les intentions que Siri vous envoie. Siri transmettra au handler(for:) méthode toutes les intentions au cas où votre extension prend en charge plusieurs types. C’est votre travail de vérifier le type de INIntent objet et manipulez-le de manière appropriée.

le IntentHandler.swift Le modèle contient déjà un exemple d’implémentation d’une intention de messagerie. Remplacez tout le code par la méthode vide suivante afin que nous puissions parcourir chaque étape ensemble.

Chaque intention a un protocole associé pour s’assurer qu’une classe implémente toutes les méthodes requises. La plupart des protocoles du cadre Intents ont la même structure.

Le protocole que nous allons mettre en œuvre s’appelle INSendPaymentIntentHandling. Ce protocole contient les méthodes obligatoires et facultatives suivantes:

  • Obligatoire:
    handle(sendPayment:completion:)
  • Optionnel:
    confirm(sendPayment:completion:) 
    resolvePayee(forSendPayment:with:)

    resolveCurrencyAmount(forSendPayment:with:)

    resolveNote(forSendPayment:with:)

Créons une extension du IntentHandler classe dans le même fichier Swift pour implémenter la seule méthode requise.

C’est une implémentation très basique. Nous nous assurons qu’il existe un payee et currencyAmount pour définir la transaction comme réussie. Vous ne le croyez peut-être pas, mais cela fonctionne déjà! Sélectionnez le schéma Intents de Xcode et exécutez-le. Lorsque Xcode présente le menu habituel pour choisir une application à exécuter, sélectionnez Siri.

Exécutez l'extension dans le menu Xcodes

Lorsque Siri commence, essayez de dire: «Envoyez 20 $ à Patrick via TutsplusPayments». Profitez maintenant de votre premier paiement réussi avec votre voix!

Premier paiement réussi via Siri

Vous pouvez également essayer de tester le cas défaillant. Essayez de dire la même phrase que précédemment, mais sans spécifier le bénéficiaire (par exemple: «Envoyez 20 $ via TutsplusPayments»). Vous verrez que Siri échouera et présentera à l’utilisateur un bouton pour continuer le paiement dans votre application.

Échec du paiement en raison d'un nom de bénéficiaire manquant

Au cas où Siri ne comprend pas ou n’est pas fourni avec l’un des paramètres facultatifs mais que vous avez besoin d’une valeur valide, vous pouvez implémenter l’une des méthodes de résolution. Ces méthodes offrent à l’utilisateur la possibilité de donner plus de détails sur le paiement, tels que le nom du bénéficiaire, le montant exact de la devise et même une note. Avec cette architecture intelligente de l’API, vous, en tant que développeur, avez la possibilité de comprendre facilement et clairement la demande de votre utilisateur de différentes manières.

Dans une application du monde réel, vous créeriez un cadre dynamique partagé entre votre application iOS et vos extensions. En utilisant cette architecture, vous pouvez partager la même logique métier dans plusieurs cibles. Vous n’aurez pas besoin de l’implémenter plusieurs fois, mais une seule fois pour toutes les cibles!

En relation :  Faites cela après avoir installé la mise à jour des créateurs de Windows 10

Extension de l’interface utilisateur Intents

Dans la dernière partie de ce didacticiel, je vais vous montrer comment vous pouvez personnaliser l’interface utilisateur que Siri affiche.

Tout d’abord, n’oubliez pas de définir la classe d’intention correcte que vous souhaitez gérer dans le Info.plist du ExtensionUI, comme nous l’avons fait dans la section précédente.

Sautez dans l’extension d’interface utilisateur Intents et vous verrez le modèle que Xcode a créé pour vous. Il contient un IntentViewController, qui est une simple sous-classe de UIViewController qui implémente le INUIHostedViewControlling protocole. Un fichier Storyboard a également été créé pour vous; ouvrez-le pour que nous puissions commencer à personnaliser l’interface utilisateur.

Ajouter un UIImageView comme arrière-plan et une étiquette au centre. Téléchargez le image de fond, importez-le dans la cible de l’interface utilisateur Intents et définissez-le comme l’image du nouveau UIImageView. Créer un UILabel objet et positionnez-le au centre de la vue. Vous pouvez facilement utiliser AutoLayout pour configurer les contraintes dans Storyboard.

Ouvrez l’Assistant Editor et créez un @IBOutlet pour votre étiquette et appelez-la contentLabel. Le résultat devrait ressembler à quelque chose comme ceci:

Storyboard montrant la nouvelle vue IntentsUI

Ouvrez le IntentViewController fichier et vous verrez un tas d’exemples de code. Vous pouvez tout supprimer sauf le configure(with:context:completion:) méthode que nous allons mettre en œuvre maintenant. Cette méthode est appelée lorsque l’interface utilisateur est prête à être configurée. Ce que nous devons faire ici, c’est définir le contenu du UILabel.

Tout d’abord, nous vérifions que le intent l’objet est de type INSendPaymentIntent. Si tel est le cas, nous nous assurons également que toutes les propriétés que nous voulons afficher ne sont pas nil, sinon nous appelons simplement le bloc de complétion avec une taille de zéro pour masquer notre vue personnalisée. Si tout se passe comme prévu, nous créons une chaîne personnalisée avec les données que nous voulons montrer à l’utilisateur et la définissons comme le texte du contentLabel.

Exécutez à nouveau l’extension et vous verrez la nouvelle vue dans Siri!

Nouvelle interface utilisateur personnalisée dans l'extension Siri

Siri affiche toujours la vue par défaut. Nous pouvons le cacher en rendant notre contrôleur de vue conforme à la INUIHostedViewSiriProviding protocole.

En retournant true dans le displaysPaymentTransaction variable, nous disons à Siri que notre contrôleur de vue s’occupe d’afficher toutes les informations nécessaires à l’utilisateur et que la vue par défaut peut être masquée. Le résultat est bien plus propre maintenant!

Résultat final de l'interface utilisateur personnalisée affichée par Siri

Remarque: comme vous pouvez le voir sur cette image, lorsque vous spécifiez une devise différente de celle du dollar américain, Siri comprend correctement et renvoie le code de devise à l’extension. Malheureusement, le texte affiche toujours des dollars américains. J’ai rapporté ce bug à Apple!

Conclusion

J’espère que vous avez apprécié ce tutoriel. Siri est très puissant même s’il est limité à certains types d’applications pour le moment. Si vous envisagez de l’implémenter dans vos propres applications, assurez-vous de bien la commercialiser auprès de vos utilisateurs, car ils ne sont peut-être pas conscients de la façon dont votre application est devenue cool et avancée!

Si vous souhaitez en savoir plus sur l’intégration de Siri dans votre application, ou si vous souhaitez en savoir plus sur certaines des autres fonctionnalités intéressantes pour les développeurs d’iOS 10, consultez le cours de Markus Mühlberger.

Consultez également certains de nos autres didacticiels gratuits sur les fonctionnalités d’iOS 10.

Moyens Staff
Moyens I/O Staff vous a motivé, donner des conseils sur la technologie, le développement personnel, le style de vie et des stratégies qui vous aider.