Raccourcis Siri - comment les mettre en œuvre ?
Publié: 2020-01-16Les raccourcis Siri, une nouvelle fonctionnalité présentée à la WWDC de l'année dernière, offrent la possibilité d'exécuter certaines fonctionnalités de l'application en arrière-plan. Nous n'avons pas besoin d'allumer l'application pour utiliser ces fonctionnalités dans l'application, nous pouvons simplement dire à Siri, par exemple "Burger Time" et le système sait à quelle application ce raccourci est attribué et commande un hamburger pour nous.
Que sont les raccourcis Siri ?
- Un moyen pratique d'accomplir des tâches à partir de l'écran de verrouillage ou de la zone de recherche.
- Des raccourcis peuvent également être ajoutés à Siri pour fonctionner avec une phrase vocale sur iOS, HomePod et watchOS.
- Les développeurs ajoutent des crochets de raccourci dans leurs applications qui permettent à Siri de se connecter à ces raccourcis.
- Utiliser des modèles d'apprentissage automatique de votre comportement pour analyser les fonctions courantes que vous exécutez et suggérer automatiquement des raccourcis.
- iOS 12+
Dans cet article, nous nous concentrerons sur la mise en œuvre du raccourci de commande, l'une des applications les plus populaires des raccourcis Siri. Nous allons créer une application simple qui vous permettra de commander des burgers
Comment pouvons-nous créer des raccourcis Siri ?

- Au tout début, nous devons penser à la fonctionnalité que l'utilisateur veut vraiment faciliter dans notre application . Il doit s'agir d'une fonctionnalité que l'utilisateur exécute fréquemment et qui nécessite que l'utilisateur entre dans l'application et y transmette un long chemin. Les raccourcis permettront de raccourcir ce chemin pour exécuter la fonctionnalité.
- À l'étape suivante, vous devez donner un raccourci. Qu'est-ce que ça veut dire? Nous devons transmettre l'information au système sur le fait que nous avons passé une commande, par exemple un hamburger avec du bacon. Nous fournissons ces informations au système et plus tard, Siri peut nous suggérer à un moment précis de passer cette commande spécifique.
- La dernière chose à faire est de gérer ce raccourci, qui se produit lorsque l'utilisateur indique à Siri la commande définie précédemment , par exemple "Burger time", ou dans le cas où l'utilisateur appuie sur le raccourci proposé par Siri sur l'écran de verrouillage.
Ok, peut-être qu'on va écrire du code ? Quelles sont nos possibilités en tant que développeurs ?

NSUserActivity — Nous allons créer un raccourci qui nous permettra de lancer l'écran pour passer une nouvelle commande
- Ajouter la clé à Info.plist
<key>NSUserActivityTypes</key> <tableau> <string>com.miquido.SiriShotcutDemo.make-order</string> </array>
2. Donnez le raccourci lorsque l'utilisateur entre dans l'écran
laissez orderActivity = NSUserActivity (activityType : "com.miquido.SiriShotcutDemo.make-order") orderActivity.persistentIdentifier = NSUserActivityPersistentIdentifier("com.miquido.SiriShotcutDemo.make-order") orderActivity.isEligibleForSearch = vrai orderActivity.isEligibleForPrediction = true orderActivity.title = "Passer une commande" orderActivity.suggestedInvocationPhrase = "Heure du hamburger" let attributs = CSSearchableItemAttributeSet(itemContentType : kUTTypeItem as String) attributs.contentDescription = "Délicieux hamburgers !" attributs.thumbnailData = UIImage(nommé : "logo") ?.pngData() orderActivity.contentAttributeSet = attributs userActivity = orderActivity
3. Dans AppDelegate
, vous devez implémenter le délégué continueUserActivity
qui, après avoir obtenu ce type particulier, redirigera vers l'écran donné
func application(_ application : UIApplication, continuer userActivity : NSUserActivity, restoreHandler : @escaping ([UIUserActivityRestoring] ?) -> Void) -> Bool { if userActivity.activityType == "com.miquido.SiriShotcutDemo.make-order" { // gérer l'application ouverte sur l'écran de commande retourner vrai } retourner faux }

Intentions — Nous allons implémenter un raccourci pour passer des commandes
Conseil de pro avant la mise en œuvre :
Les intentions apparaissent lorsque l'utilisateur fait quelque chose systématiquement. Cependant, lorsque vous souhaitez tester cette fonctionnalité afin de toujours recevoir une suggestion de Siri, vous devez activer deux options - " Afficher les raccourcis récents " et " Afficher les dons sur l'écran de verrouillage " dans Paramètres -> Développeur.

- Créez un fichier de définition d'intention. Le meilleur moyen est de l'ajouter à un framework séparé dans mon projet, ce sera dans
OrderKit
.

2. Sélectionnez une catégorie, dans ce cas "Commande". Dans ce fichier, nous devons choisir les paramètres que nous transmettrons au système et créer des combinaisons de ces paramètres.


3. Créez une nouvelle cible avec une extension pour les intentions, sélectionnez "Inclure l'extension de l'interface utilisateur" lorsque vous la créez.



Order.intentdefinition
4. Créez une interface utilisateur pour l'intention dans le fichier MainInterface.storyboard
.

5. Configurez l' ready
et success
dans IntentViewController
.
func configureView(pour les paramètres : Set<INParameter>, d'interaction : INInteraction, Comportementinteractif : INUIComportementInteractif, contexte : INUIHostedViewContext, complétion : @escaping (Bool, Set<INParameter>, CGSize) -> Void) { guard let intent = interaction.intent as? OrderIntent else { achèvement (faux, Set(), .zero) revenir } si interaction.intentHandlingStatus == .ready { configuration (avec : intention) waitTime.isHidden = vrai complétion (vrai, paramètres, taille souhaitée) } sinon si interaction.intentHandlingStatus == .success, laisser réponse = interaction.intentResponse comme ? OrderIntentReponse { configuration (avec : intention) waitTime.isHidden = faux si laissez waitTimeText = response.waitTime { waitTime.text = "La commande sera prête dans \(waitTimeText) minutes" } everythingIsOkLabel.text = "Appuyez pour afficher les commandes" complétion (vrai, paramètres, taille souhaitée) } complétion(false, paramètres, .zero) } configuration de la fonction privée (avec l'intention : OrderIntent) { burgerNameLabel.text = intent.burgerName si laisser quantité = intent.quantity?.stringValue { quantiteLabel.text = "\(quantite) pc." } if let additions = intent.additions { additionsLabel.text = additions.elements.toString } }
6. Après avoir créé l'interface utilisateur, nous pouvons accéder au don de notre intention. Dans ce cas, il est préférable de faire don d'intentions lors de la commande. Nous fournissons au système toutes les informations que nous avons précédemment définies dans le fichier Order.intentdefinition
, c'est-à-dire le nom du burger, la quantité et les ajouts, et la phrase proposée affichée dans le cas où nous voudrions ajouter immédiatement ce raccourci à Siri lors de la commande .
fonction privée donateInteraction(for order: Order) { let interaction = INInteraction(intent: order.intent, response: nil) interaction.donate { (erreur) dans si erreur != néant { // gérer l'erreur } autre { print("Interaction donnée avec succès") } } }
commande d'extension publique { var intention : OrderIntent { laissez orderIntent = OrderIntent() orderIntent.burgerName = nom if let intValue = Int(quantité) { orderIntent.quantity = NSNumber(valeur : intValue) } orderIntent.suggestedInvocationPhrase = "Heure du hamburger" orderIntent.additions = additions.map { option -> INObject dans return INObject(identifiant : option.rawValue, affichage : option.rawValue) } commande de retourIntention } }
7. Nous pouvons maintenant gérer la situation dans le cas où l'utilisateur reçoit la suggestion d'un raccourci et clique dessus et dans le cas où l'utilisateur appelle le raccourci par Siri.
classe publique OrderIntentHandler : NSObject, OrderIntentHandling { public func confirm(intent: OrderIntent, complétion : @escaping (OrderIntentResponse) -> Void) { achèvement (OrderIntentResponse (code : OrderIntentResponseCode.ready, userActivity : nil)) } public func handle(intent: OrderIntent, complétion : @escaping (OrderIntentResponse) -> Void) { guard let burgerName = intent.burgerName else { achèvement (OrderIntentResponse (code : .failure, userActivity : nil)) revenir } Defaults.save(ordre : Ordre(de : intention)) achèvement(OrderIntentResponse.success(burgerName : burgerName, waitTime : "5")) } }

C'est tout, tout fonctionne
Vous pouvez consulter l'ensemble du projet sur mon GitHub ici
Sources:
- https://developer.apple.com/videos/play/wwdc2018/211/
- https://developer.apple.com/videos/play/wwdc2018/214/
- https://developer.apple.com/documentation/sirikit/donating_shortcuts
- https://developer.apple.com/design/human-interface-guidelines/sirikit/overview/siri-shortcuts/
- https://www.raywenderlich.com/6462-siri-shortcuts-tutorial-in-ios-12