Partager via


Mises à jour SiriKit dans iOS 11

SiriKit a été introduit dans iOS 10, avec un certain nombre de domaines de service (notamment des séances d’entraînement, des réservations de trajet et des appels). Reportez-vous à la section SiriKit pour connaître les concepts de SiriKit et comment implémenter SiriKit dans votre application.

Démonstration de la liste des tâches Siri

SiriKit dans iOS 11 ajoute ces domaines d’intention nouveaux et mis à jour :

  • Listes et notes – Nouveau ! Fournit une API permettant aux applications de traiter les tâches et les notes.
  • Codes visuels – Nouveau ! Siri peut afficher des codes QR pour partager des informations de contact ou participer aux transactions de paiement.
  • Paiements : ajout d’intentions de recherche et de transfert pour les interactions de paiement.
  • Réservation de trajet : ajout d’intentions d’annulation de trajet et de commentaires.

Quelques autres nouvelles fonctions :

  • Autres noms d’application : fournit des alias qui aident les clients à indiquer à Siri de cibler votre application en proposant d’autres noms/prononciations.
  • Démarrage des séances d’entraînement : offre la possibilité de commencer un entraînement en arrière-plan.

Certaines de ces fonctionnalités sont expliquées ci-dessous. Pour plus d’informations sur les autres, reportez-vous à la documentation SiriKit d’Apple.

Listes et notes

Le nouveau domaine de listes et de notes fournit une API permettant aux applications de traiter des tâches et des notes via des demandes vocales Siri.

Tâches

  • Disposez d’un titre et d’un état d’achèvement.
  • Incluez éventuellement une échéance et un emplacement.

Notes

  • Avoir un titre et un champ de contenu.

Les tâches et les notes peuvent être organisées en groupes.

Procédure de traitement d’une demande SiriKit

Traitez une demande SiriKit en procédant comme suit :

  1. Résoudre : validez les paramètres et demandez des informations supplémentaires à l’utilisateur (si nécessaire).
  2. Confirmez : validation finale et vérification que la demande peut être traitée.
  3. Handle : effectuez l’opération (mise à jour des données ou exécution d’opérations réseau).

Les deux premières étapes sont facultatives (bien que encouragées) et la dernière étape est requise. Il existe des instructions plus détaillées dans la section SiriKit.

Résoudre et confirmer les méthodes

Ces méthodes facultatives permettent à votre code d’effectuer la validation, de sélectionner les valeurs par défaut ou de demander des informations supplémentaires à l’utilisateur.

Par exemple, pour l’interface IINCreateTaskListIntent , la méthode requise est HandleCreateTaskList. Il existe quatre méthodes facultatives qui fournissent plus de contrôle sur l’interaction Siri :

  • ResolveTitle : valide le titre, définit un titre par défaut (le cas échéant) ou signale que les données ne sont pas requises.
  • ResolveTaskTitles : valide la liste des tâches parlées par l’utilisateur.
  • ResolveGroupName : valide le nom du groupe, choisit un groupe par défaut ou signale que les données ne sont pas requises.
  • ConfirmCreateTaskList : valide que votre code peut effectuer l’opération demandée, mais ne l’effectue pas (seules les méthodes doivent modifier les Handle* données).

Gérer l’intention

Il existe six intentions dans les listes et le domaine des notes, trois pour les tâches et trois pour les notes. Les méthodes que vous devez implémenter pour gérer ces intentions sont les suivantes :

  • Pour les tâches :
    • HandleAddTasks
    • HandleCreateTaskList
    • HandleSetTaskAttribute
  • Pour les remarques :
    • HandleCreateNote
    • HandleAppendToNote
    • HandleSearchForNotebookItems

Chaque méthode a un type d’intention spécifique passé à celui-ci, qui contient toutes les informations que Siri a analysées à partir de la demande de l’utilisateur (et éventuellement mis à jour dans les méthodes et Confirm* les Resolve* méthodes). Votre application doit analyser les données fournies, puis effectuer certaines actions pour stocker ou traiter les données, et retourner un résultat que Siri parle et affiche à l’utilisateur.

Codes de réponse

Les méthodes obligatoires Handle* et facultatives Confirm* indiquent un code de réponse en définissant une valeur sur l’objet qu’ils passent à leur gestionnaire d’achèvement. Les réponses proviennent de l’énumération INCreateTaskListIntentResponseCode :

  • Ready : retourne pendant la phase de confirmation (par exemple, à partir d’une Confirm* méthode, mais pas à partir d’une Handle* méthode).
  • InProgress – Utilisé pour les tâches de longue durée (telles qu’une opération réseau/serveur).
  • Success : répond avec les détails de l’opération réussie (uniquement à partir d’une Handle* méthode).
  • Failure : signifie qu’une erreur s’est produite et que l’opération n’a pas pu être terminée.
  • RequiringAppLaunch : ne peut pas être traitée par l’intention, mais l’opération est possible dans l’application.
  • Unspecified – Ne pas utiliser : le message d’erreur s’affiche à l’utilisateur.

En savoir plus sur ces méthodes et réponses dans la documentation des listes et notes SiriKit d’Apple.

Implémentation de listes et de notes

Tout d’abord, pour ajouter la prise en charge de SiriKit, procédez comme suit pour votre application iOS :

  1. Tick SiriKit in Entitlements.plist.
  2. Ajoutez la clé De description de l’utilisation de Siri à Info.plist, ainsi qu’un message pour vos clients.
  3. Appelez la INPreferences.RequestSiriAuthorization méthode dans l’application pour inviter l’utilisateur à autoriser les interactions Siri.
  4. Ajoutez SiriKit à votre ID d’application sur le portail des développeurs et recréez vos profils d’approvisionnement pour inclure le nouveau droit.

Ajoutez ensuite un nouveau projet d’extension à votre application pour gérer les demandes Siri :

  1. Cliquez avec le bouton droit sur votre solution et choisissez Ajouter > un nouveau projet....
  2. Choisissez le modèle d’extension > intentions iOS>.
  3. Deux nouveaux projets seront ajoutés : Intention et IntentUI. La personnalisation de l’interface utilisateur est facultative. L’exemple inclut donc uniquement du code dans le projet Intention .

Le projet d’extension est l’endroit où toutes les demandes SiriKit seront traitées. En tant qu’extension distincte, elle ne dispose pas automatiquement d’un moyen de communiquer avec votre application principale . Cela est généralement résolu en implémentant le stockage de fichiers partagé à l’aide de groupes d’applications.

Configurer le gestionnaire d’intentions

La IntentHandler classe est le point d’entrée des requêtes Siri : chaque intention est passée à la GetHandler méthode, qui retourne un objet qui peut gérer la requête.

Le code ci-dessous montre une implémentation simple :

[Register("IntentHandler")]
public partial class IntentHandler : INExtension, IINNotebookDomainHandling
{
  protected IntentHandler(IntPtr handle) : base(handle)
  {}
  public override NSObject GetHandler(INIntent intent)
  {
    // This is the default implementation.  If you want different objects to handle different intents,
    // you can override this and return the handler you want for that particular intent.
    return this;
  }
  // add intent handlers here!
}

La classe doit hériter de INExtension, et parce que l’exemple va gérer les intentions de listes et de notes, il implémente IINNotebookDomainHandlingégalement .

Remarque

  • Il existe une convention dans .NET pour que les interfaces soient précédées d’une majuscule I, à laquelle Xamarin adhère lors de la liaison de protocoles à partir du Kit de développement logiciel (SDK) iOS.
  • Xamarin conserve également les noms de types d’iOS et Apple utilise les deux premiers caractères dans les noms de types pour refléter l’infrastructure à laquelle appartient un type.
  • Pour l’infrastructure Intents , les types sont préfixés par IN* (par exemple INExtension), mais ils ne sont pas des interfaces.
  • Il suit également que les protocoles (qui deviennent des interfaces en C#) se terminent par deux Is, comme IINAddTasksIntentHandling.

Gestion des intentions

Chaque intention (Ajouter une tâche, définir l’attribut de tâche, etc.) est implémentée dans une méthode unique similaire à celle indiquée ci-dessous. La méthode doit effectuer trois fonctions principales :

  1. Traiter l’intention : les données analysées par Siri sont disponibles dans un intent objet spécifique au type d’intention. Votre application a peut-être validé ces données à l’aide de méthodes facultatives Resolve* .
  2. Valider et mettre à jour le magasin de données : enregistrez des données dans le système de fichiers (à l’aide de groupes d’applications afin que l’application iOS principale puisse également y accéder) ou via une demande réseau.
  3. Fournir une réponse : utilisez le completion gestionnaire pour renvoyer une réponse à Siri pour lire/afficher à l’utilisateur :
public void HandleCreateTaskList(INCreateTaskListIntent intent, Action<INCreateTaskListIntentResponse> completion)
{
  var list = TaskList.FromIntent(intent);
  // TODO: have to create the list and tasks... in your app data store
  var response = new INCreateTaskListIntentResponse(INCreateTaskListIntentResponseCode.Success, null)
  {
    CreatedTaskList = list
  };
  completion(response);
}

Notez qu’il est passé en tant que null deuxième paramètre à la réponse : il s’agit du paramètre d’activité de l’utilisateur et, lorsqu’il n’est pas fourni, une valeur par défaut sera utilisée. Vous pouvez définir un type d’activité personnalisé tant que votre application iOS la prend en charge via la NSUserActivityTypes clé dans Info.plist. Vous pouvez ensuite gérer ce cas lorsque votre application est ouverte et effectuer des opérations spécifiques (telles que l’ouverture à un contrôleur d’affichage approprié et le chargement des données à partir de l’opération Siri).

L’exemple code également en dur le Success résultat, mais dans des scénarios réels, un rapport d’erreurs approprié doit être ajouté.

Expressions de test

Les expressions de test suivantes doivent fonctionner dans l’exemple d’application :

  • « Faire une liste d’épicerie avec des pommes, des bananes et des poires dans TasksNotes »
  • « Ajouter une tâche WWDC dans TasksNotes »
  • « Ajouter une tâche WWDC à la liste d’entraînement dans TasksNotes »
  • « Marquer participer au WWDC comme terminé dans TasksNotes »
  • « Dans TasksNotes me rappelle d’acheter un iphone quand je rentre chez moi »
  • « Marquer l’achat d’iPhone comme terminé dans TasksNotes »
  • « Rappelez-moi de quitter la maison à 8h00 dans TasksNotes »

Créer un exemple de liste Définir la tâche comme exemple complet

Remarque

Le simulateur iOS 11 prend en charge les tests avec Siri (contrairement aux versions antérieures).

Si vous testez sur des appareils réels, n’oubliez pas de configurer votre ID d’application et vos profils d’approvisionnement pour la prise en charge de SiriKit.

Autres noms

Cette nouvelle fonctionnalité iOS 11 signifie que vous pouvez configurer d’autres noms pour votre application pour aider les utilisateurs à le déclencher correctement avec Siri. Ajoutez les clés suivantes au fichier Info.plist du projet d’application iOS :

Info.plist montrant d’autres clés et valeurs de nom d’application

Avec les noms d’applications alternatifs définis, les expressions suivantes fonctionnent également pour l’exemple d’application (qui est en fait nommé TasksNotes) :

  • « Faire une liste d’épicerie avec des pommes, des bananes et des poires dans MonkeyNotes »
  • « Ajouter une tâche WWDC dans MonkeyTodo »

Dépannage

Certaines erreurs que vous pouvez rencontrer lors de l’exécution de l’exemple ou l’ajout de SiriKit à vos propres applications :

NSInternalInconsistencyException

Objective-C exception levée. Nom : NSInternalInconsistencyException Reason : Use of the class <INPreferences : 0x60400082ff00> from an app nécessite le droit com.apple.developer.siri. Avez-vous activé la fonctionnalité Siri dans votre projet Xcode ?

  • SiriKit est coché dans Entitlements.plist.

  • Les droits.plist sont configurés dans la signature de bundle iOS de build d’options > > de projet.

    Options de projet montrant correctement les droits d’utilisation définis

  • (pour le déploiement d’appareils) L’ID d’application est activé pour SiriKit et le profil de provisionnement téléchargés.