Sirikit par Julien Coudsi

Idean France
Idean FranceIdean France
SIRIKIT
COCOAHEADS - MONTPELLIER – 17 NOVEMBRE 2016
AU SOMMAIRE…
• Quoi de neuf ?
• Traiter une demande
• Ajouter du vocabulaire
• Personnaliser l’affichage
• Démo
28.11.16 BACKELITE 2
QUOI DE NEUF ?
QUOI DE NEUF AVEC SIRIKIT ?
28.11.16 BACKELITE 4
• A partir d’iOS 10, Siri s’ouvre aux applications tierces
• Domaines disponibles :
 Réservation de véhicule
 Messages
 Photos
 Paiements
 Communication audio et vidéo
 Fitness
 Restaurants (avec Plans)
 Carplay
TRAITER UNE DEMANDE
PRE-REQUIS
28.11.16 BACKELITE 6
• Une application iOS existante
• Implémenter le code de l’application utilisé par Siri dans un framework
• Utiliser un conteneur partagé pour les ressources communes
• iOS 10 / Xcode 8
COMMENT CA MARCHE ?
28.11.16 BACKELITE 7
• Utilisation d’une Intents Extension
• Un « intent » correspond à une demande de l’utilisateur
INExtension
Intent handler B 1 - Resolve
« Envoi un message »
2 - Confirm
3 - Handle
Action
INIntentResponse
INIntent
Intent handler A
INTENTS ET DOMAINES
A chaque domaine sa liste d’intents :
• Messages
o INSendMessageIntent
o INSearchForMessagesIntent
o INSetMessagesAttributes
• Paiements
o INSendPaymentIntent
o INRequestPaymentIntent
etc …
CONFIGURATION DU PROJET
28.11.16 BACKELITE 9
• Info.plist de l’extension
• Autoriser l’application à utiliser Siri
• Capability Siri activée
• App id supportant SiriKit
• Info.plist de l’application
INEXTENSION
28.11.16 BACKELITE 10
• Point d’entrée de l’extension
• Appelle le bon intent handler
class IntentExtension: INExtension {
override func handler(for intent: INIntent) -> Any? {
if intent is INSendMessageIntent {
return MessagesIntentHandler()
} else if intent is INStartAudioCallIntent {
return AudioCallIntentHandler()
} else {
return nil
}
}
}
INTENT HANDLER - RESOLVE
28.11.16 BACKELITE 11
• Vérification des paramètres de l’intent
• Peut solliciter l’utilisateur pour des précisions
func resolveRecipients(forSendMessage intent: INSendMessageIntent, with completion: @escaping ([INPersonResolutionResult]) -> Void)
{
guard let recipients = intent.recipients else {
return
}
if recipients.count == 0 {
completion([INPersonResolutionResult.needsValue()])
} else {
completion([INPersonResolutionResult.success(with: recipients[0])])
}
}
INTENT HANDLER - CONFIRM
28.11.16 BACKELITE 12
• Validation finale de l’intent avant son traitement
• Sollicite l’utilisateur dans certains cas :
• Demandes irréversibles
• Transactions financières
func confirm(sendMessage intent: INSendMessageIntent, completion: @escaping (INSendMessageIntentResponse) -> Void) {
completion(INSendMessageIntentResponse(code: .ready, userActivity: nil))
}
INTENT HANDLER - HANDLE
28.11.16 BACKELITE 13
• Réalise la tâche associée à l’intent
• Renvoie une réponse
func handle(sendMessage intent: INSendMessageIntent, completion: @escaping (INSendMessageIntentResponse) -> Void) {
var success = false
if let recipients = intent.recipients {
success = ContactsManager.sharedManager.sendMessage(to: recipients)
}
completion(INSendMessageIntentResponse(code: success ? .success : .failure, userActivity: nil))
}
AJOUTER DU VOCABULAIRE
VOCABULAIRE SPECIFIQUE A UN UTILISATEUR
28.11.16 BACKELITE 15
• Restreint aux catégories suivantes :
 Noms de contacts
 Groupes de contact
 Tags de photo
 Noms d’albums photos
 Noms d’exercices (fitness)
 Profils de voiture (CarPlay)
DispatchQueue(label: "SiriVocabulary").async {
let contactNicknames:NSOrderedSet = ["JeanMi", "Zozor", "Blop", "Toto"]
INVocabulary.shared().setVocabularyStrings(contactNicknames, of: .contactName)
}
• Utilise l’API INVocabulary depuis l’application
VOCABULAIRE COMMUN A TOUS LES UTILISATEURS
28.11.16 BACKELITE 16
• Utilise le fichier AppIntentVocabulary.plist
• Restreint aux catégories suivantes :
 Options de réservation d’un véhicule
 Noms d’exercices (fitness)
APPINTENTVOCABULARY.PLIST
28.11.16 BACKELITE 17
PERSONNALISER L’AFFICHAGE
PRINCIPE
28.11.16 BACKELITE 19
• Enrichir l’interface lors des échanges avec l’utilisateur
• Utilisation d’une Intents UI Extension
• Restreint aux domaines suivants
 Messages
 Paiements
 Réservation de véhicule
 Fitness
CONFIGURATION DU PROJET
28.11.16 BACKELITE 20
• Info.plist de l’extension
• Ajout du storyboard et d’un unique ViewController associé
CONFIGURATION DU VIEW CONTROLLER
28.11.16 BACKELITE 21
• Implémentation du protocole INUIHostedViewControlling
func configure(with interaction: INInteraction!, context: INUIHostedViewContext, completion: ((CGSize) -> Void)!) {
...
if let completion = completion {
completion(self.extensionContext!.hostedViewMaximumAllowedSize)
}
}
• Implémentation du protocole INUIHostedViewSiriProviding pour masquer
la vue par défaut dans Siri
var displaysMessage: Bool {
return true
}
DEMO
julien.coudsi@backelite.com
www.backelite.com
CONTACTEZ-NOUS
COUDSI Julien
Développeur iOS
28.11.16 BACKELITE 23
1 sur 23

Recommandé

Cocoaheads Montpellier Meetup : La programmation réactive sur iOS avec Réacti... par
Cocoaheads Montpellier Meetup : La programmation réactive sur iOS avec Réacti...Cocoaheads Montpellier Meetup : La programmation réactive sur iOS avec Réacti...
Cocoaheads Montpellier Meetup : La programmation réactive sur iOS avec Réacti...Idean France
570 vues19 diapositives
Messages Extensions par Nicolas Fontaine par
Messages Extensions par Nicolas FontaineMessages Extensions par Nicolas Fontaine
Messages Extensions par Nicolas FontaineIdean France
622 vues24 diapositives
Notions de base de JavaScript par
Notions de base de JavaScriptNotions de base de JavaScript
Notions de base de JavaScriptKristen Le Liboux
6.7K vues49 diapositives
Cours javascript v1 par
Cours javascript v1Cours javascript v1
Cours javascript v1TheBest Icanbe
2.7K vues88 diapositives
Function oop - bonnes pratiques ms tech days par
Function   oop - bonnes pratiques ms tech daysFunction   oop - bonnes pratiques ms tech days
Function oop - bonnes pratiques ms tech daysJean-Pierre Vincent
853 vues67 diapositives
Javascript objet : que fait ce code ? par
Javascript objet : que fait ce code ?Javascript objet : que fait ce code ?
Javascript objet : que fait ce code ?Ruau Mickael
519 vues25 diapositives

Contenu connexe

Tendances

Un exemple élémentaire d'application MVC en PHP par
Un exemple élémentaire d'application MVC en PHPUn exemple élémentaire d'application MVC en PHP
Un exemple élémentaire d'application MVC en PHPKristen Le Liboux
57.7K vues26 diapositives
Promises Javascript par
Promises JavascriptPromises Javascript
Promises JavascriptJulien CROUZET
2.8K vues75 diapositives
Javascript - Tableaux : que fait ce code ? par
Javascript - Tableaux : que fait ce code ?Javascript - Tableaux : que fait ce code ?
Javascript - Tableaux : que fait ce code ?Ruau Mickael
306 vues23 diapositives
Php mysql cours par
Php mysql coursPhp mysql cours
Php mysql courszan
1.9K vues33 diapositives
Plugins Xcode par
Plugins XcodePlugins Xcode
Plugins XcodeCocoaHeads France
5.1K vues33 diapositives
Marzouk-HTTP-SESSION-JEE par
Marzouk-HTTP-SESSION-JEEMarzouk-HTTP-SESSION-JEE
Marzouk-HTTP-SESSION-JEEabderrahim marzouk
45 vues13 diapositives

Tendances(12)

En vedette

UI Design Trends for 2017 par
UI Design Trends for 2017UI Design Trends for 2017
UI Design Trends for 2017Idean France
2.8K vues24 diapositives
Rendering unit tests par Nicolas Fontaine par
Rendering unit tests par Nicolas FontaineRendering unit tests par Nicolas Fontaine
Rendering unit tests par Nicolas FontaineIdean France
396 vues21 diapositives
Tendances du Design d'Interface 2017 par
Tendances du Design d'Interface 2017Tendances du Design d'Interface 2017
Tendances du Design d'Interface 2017Idean France
1.5K vues24 diapositives
A developer who knows how to design by Audrey Hacq par
A developer who knows how to design by Audrey HacqA developer who knows how to design by Audrey Hacq
A developer who knows how to design by Audrey HacqIdean France
1.7K vues33 diapositives
Cocoaheads Montpellier Meetup : 3D Touch for iOS par
Cocoaheads Montpellier Meetup : 3D Touch for iOSCocoaheads Montpellier Meetup : 3D Touch for iOS
Cocoaheads Montpellier Meetup : 3D Touch for iOSIdean France
1K vues41 diapositives
Meetup CocoaHeads Montpellier : conférence sur l'Auto Layout par
Meetup CocoaHeads Montpellier : conférence sur l'Auto LayoutMeetup CocoaHeads Montpellier : conférence sur l'Auto Layout
Meetup CocoaHeads Montpellier : conférence sur l'Auto LayoutIdean France
2.8K vues129 diapositives

En vedette(20)

UI Design Trends for 2017 par Idean France
UI Design Trends for 2017UI Design Trends for 2017
UI Design Trends for 2017
Idean France2.8K vues
Rendering unit tests par Nicolas Fontaine par Idean France
Rendering unit tests par Nicolas FontaineRendering unit tests par Nicolas Fontaine
Rendering unit tests par Nicolas Fontaine
Idean France396 vues
Tendances du Design d'Interface 2017 par Idean France
Tendances du Design d'Interface 2017Tendances du Design d'Interface 2017
Tendances du Design d'Interface 2017
Idean France1.5K vues
A developer who knows how to design by Audrey Hacq par Idean France
A developer who knows how to design by Audrey HacqA developer who knows how to design by Audrey Hacq
A developer who knows how to design by Audrey Hacq
Idean France1.7K vues
Cocoaheads Montpellier Meetup : 3D Touch for iOS par Idean France
Cocoaheads Montpellier Meetup : 3D Touch for iOSCocoaheads Montpellier Meetup : 3D Touch for iOS
Cocoaheads Montpellier Meetup : 3D Touch for iOS
Idean France1K vues
Meetup CocoaHeads Montpellier : conférence sur l'Auto Layout par Idean France
Meetup CocoaHeads Montpellier : conférence sur l'Auto LayoutMeetup CocoaHeads Montpellier : conférence sur l'Auto Layout
Meetup CocoaHeads Montpellier : conférence sur l'Auto Layout
Idean France2.8K vues
Opérer un unbundling : 6 questions que les marques doivent se poser par Idean France
Opérer un unbundling : 6 questions que les marques doivent se poserOpérer un unbundling : 6 questions que les marques doivent se poser
Opérer un unbundling : 6 questions que les marques doivent se poser
Idean France5.7K vues
App groups, faire communiquer ses applications {Cocoaheads Montpellier} par Idean France
App groups, faire communiquer ses applications {Cocoaheads Montpellier}App groups, faire communiquer ses applications {Cocoaheads Montpellier}
App groups, faire communiquer ses applications {Cocoaheads Montpellier}
Idean France665 vues
Programmation Orientée Protocole {Cocoaheads Montpellier} par Idean France
Programmation Orientée Protocole {Cocoaheads Montpellier}Programmation Orientée Protocole {Cocoaheads Montpellier}
Programmation Orientée Protocole {Cocoaheads Montpellier}
Idean France651 vues
CA Layer / Core Animation {Cocoaheads Montpellier} par Idean France
CA Layer / Core Animation {Cocoaheads Montpellier}CA Layer / Core Animation {Cocoaheads Montpellier}
CA Layer / Core Animation {Cocoaheads Montpellier}
Idean France676 vues
Cocoaheads Montpellier Meetup : Comment gérer son onboarding par Idean France
Cocoaheads Montpellier Meetup : Comment gérer son onboardingCocoaheads Montpellier Meetup : Comment gérer son onboarding
Cocoaheads Montpellier Meetup : Comment gérer son onboarding
Idean France1K vues
Cocoaheads Montpellier Meetup : L'analyse de Code Statique avec Objective-C /... par Idean France
Cocoaheads Montpellier Meetup : L'analyse de Code Statique avec Objective-C /...Cocoaheads Montpellier Meetup : L'analyse de Code Statique avec Objective-C /...
Cocoaheads Montpellier Meetup : L'analyse de Code Statique avec Objective-C /...
Idean France942 vues
Un développeur sachant designer par Audrey Hacq par Idean France
Un développeur sachant designer par Audrey HacqUn développeur sachant designer par Audrey Hacq
Un développeur sachant designer par Audrey Hacq
Idean France1.2K vues
Les Formulaires - Les bonnes pratiques pour une meilleure expérience utilisat... par Idean France
Les Formulaires - Les bonnes pratiques pour une meilleure expérience utilisat...Les Formulaires - Les bonnes pratiques pour une meilleure expérience utilisat...
Les Formulaires - Les bonnes pratiques pour une meilleure expérience utilisat...
Idean France8.4K vues
Les 10 Tendances du Design d'interface en 2016 par Idean France
Les 10 Tendances du Design d'interface en 2016Les 10 Tendances du Design d'interface en 2016
Les 10 Tendances du Design d'interface en 2016
Idean France5.7K vues
Les 5 Tendances de la Performance Digitale en 2016 par Idean France
Les 5 Tendances de la Performance Digitale en 2016Les 5 Tendances de la Performance Digitale en 2016
Les 5 Tendances de la Performance Digitale en 2016
Idean France1.6K vues
Les 9 Tendances Tech en 2016 par Idean France
Les 9 Tendances Tech en 2016Les 9 Tendances Tech en 2016
Les 9 Tendances Tech en 2016
Idean France6.7K vues
Les 10 tendances de la User Experience en 2015 par Idean France
Les 10 tendances de la User Experience en 2015Les 10 tendances de la User Experience en 2015
Les 10 tendances de la User Experience en 2015
Idean France19.6K vues
Les bonnes pratiques du e-commerce par UX REPUBLIC
Les bonnes pratiques du e-commerceLes bonnes pratiques du e-commerce
Les bonnes pratiques du e-commerce
UX REPUBLIC17.4K vues

Similaire à Sirikit par Julien Coudsi

Gérer un parc de téléphones (Droidcon Tunisia 2014) par
Gérer un parc de téléphones (Droidcon Tunisia 2014)Gérer un parc de téléphones (Droidcon Tunisia 2014)
Gérer un parc de téléphones (Droidcon Tunisia 2014)Sidereo
1.3K vues47 diapositives
PROFIL IOS DISPONIBLE par
PROFIL IOS DISPONIBLEPROFIL IOS DISPONIBLE
PROFIL IOS DISPONIBLEClementine D.
97 vues4 diapositives
NodeJS for Mobile App par
NodeJS for Mobile AppNodeJS for Mobile App
NodeJS for Mobile AppHabib MAALEM
1.5K vues37 diapositives
TP_1.pdf par
TP_1.pdfTP_1.pdf
TP_1.pdfFethiBenYahia1
34 vues12 diapositives
Paris ember js lab #6 - Taking over server-side rendering websites par
Paris ember js lab #6 - Taking over server-side rendering websitesParis ember js lab #6 - Taking over server-side rendering websites
Paris ember js lab #6 - Taking over server-side rendering websitesGuillaume Gérard
245 vues24 diapositives
Mettez du temps réel dans votre Drupal avec Node JS par
Mettez du temps réel dans votre Drupal avec Node JSMettez du temps réel dans votre Drupal avec Node JS
Mettez du temps réel dans votre Drupal avec Node JSMatthieu Guillermin
3.6K vues37 diapositives

Similaire à Sirikit par Julien Coudsi(16)

Gérer un parc de téléphones (Droidcon Tunisia 2014) par Sidereo
Gérer un parc de téléphones (Droidcon Tunisia 2014)Gérer un parc de téléphones (Droidcon Tunisia 2014)
Gérer un parc de téléphones (Droidcon Tunisia 2014)
Sidereo1.3K vues
Paris ember js lab #6 - Taking over server-side rendering websites par Guillaume Gérard
Paris ember js lab #6 - Taking over server-side rendering websitesParis ember js lab #6 - Taking over server-side rendering websites
Paris ember js lab #6 - Taking over server-side rendering websites
Mettez du temps réel dans votre Drupal avec Node JS par Matthieu Guillermin
Mettez du temps réel dans votre Drupal avec Node JSMettez du temps réel dans votre Drupal avec Node JS
Mettez du temps réel dans votre Drupal avec Node JS
Construire une Application Mobile en 30 minutes avec le plugin WP-AppKit par uncatcrea
Construire une Application Mobile en 30 minutes avec le plugin WP-AppKitConstruire une Application Mobile en 30 minutes avec le plugin WP-AppKit
Construire une Application Mobile en 30 minutes avec le plugin WP-AppKit
uncatcrea2K vues
Node.js, le pavé dans la mare par Valtech
Node.js, le pavé dans la mareNode.js, le pavé dans la mare
Node.js, le pavé dans la mare
Valtech2.9K vues
Stage de fin d’études – dotcloud par Joffrey Fu Hrer
Stage de fin d’études – dotcloudStage de fin d’études – dotcloud
Stage de fin d’études – dotcloud
Joffrey Fu Hrer547 vues
Stage de fin d’études – dotcloud par Joffrey Fu Hrer
Stage de fin d’études – dotcloudStage de fin d’études – dotcloud
Stage de fin d’études – dotcloud
Joffrey Fu Hrer379 vues
Android - TPBonus - web services par Lilia Sfaxi
Android - TPBonus - web servicesAndroid - TPBonus - web services
Android - TPBonus - web services
Lilia Sfaxi88 vues
SPA avec Angular et SignalR (FR) par Rui Carvalho
SPA avec Angular et SignalR (FR)SPA avec Angular et SignalR (FR)
SPA avec Angular et SignalR (FR)
Rui Carvalho1.6K vues
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01 par MongoDB
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp012014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01
MongoDB1.1K vues

Plus de Idean France

Start with a Concept and Stop Designing like a Machine par
Start with a Concept and Stop Designing like a MachineStart with a Concept and Stop Designing like a Machine
Start with a Concept and Stop Designing like a MachineIdean France
1.1K vues52 diapositives
Design Systems : à votre marque, prêts, partez ! par
Design Systems : à votre marque, prêts, partez !Design Systems : à votre marque, prêts, partez !
Design Systems : à votre marque, prêts, partez !Idean France
1.7K vues75 diapositives
Design systems : Bench et reco sur les outils par
Design systems : Bench et reco sur les outilsDesign systems : Bench et reco sur les outils
Design systems : Bench et reco sur les outilsIdean France
2.8K vues49 diapositives
La recette graphique par
La recette graphiqueLa recette graphique
La recette graphiqueIdean France
1.7K vues28 diapositives
Graph QL par Andy Gigon par
Graph QL par Andy GigonGraph QL par Andy Gigon
Graph QL par Andy GigonIdean France
362 vues30 diapositives
Cocoheads react native + redux par Nicolas Fontaine par
Cocoheads   react native + redux par Nicolas FontaineCocoheads   react native + redux par Nicolas Fontaine
Cocoheads react native + redux par Nicolas FontaineIdean France
376 vues30 diapositives

Plus de Idean France(13)

Start with a Concept and Stop Designing like a Machine par Idean France
Start with a Concept and Stop Designing like a MachineStart with a Concept and Stop Designing like a Machine
Start with a Concept and Stop Designing like a Machine
Idean France1.1K vues
Design Systems : à votre marque, prêts, partez ! par Idean France
Design Systems : à votre marque, prêts, partez !Design Systems : à votre marque, prêts, partez !
Design Systems : à votre marque, prêts, partez !
Idean France1.7K vues
Design systems : Bench et reco sur les outils par Idean France
Design systems : Bench et reco sur les outilsDesign systems : Bench et reco sur les outils
Design systems : Bench et reco sur les outils
Idean France2.8K vues
Cocoheads react native + redux par Nicolas Fontaine par Idean France
Cocoheads   react native + redux par Nicolas FontaineCocoheads   react native + redux par Nicolas Fontaine
Cocoheads react native + redux par Nicolas Fontaine
Idean France376 vues
Meetup langages visuels - Backelite - novembre 2017 par Idean France
Meetup langages visuels - Backelite - novembre 2017Meetup langages visuels - Backelite - novembre 2017
Meetup langages visuels - Backelite - novembre 2017
Idean France523 vues
Sketch pour les designers : pourquoi, quand et comment l'utiliser ? par Idean France
Sketch pour les designers : pourquoi, quand et comment l'utiliser ?Sketch pour les designers : pourquoi, quand et comment l'utiliser ?
Sketch pour les designers : pourquoi, quand et comment l'utiliser ?
Idean France2.2K vues
From Business to Buttons by Pierre Harlé par Idean France
From Business to Buttons by Pierre HarléFrom Business to Buttons by Pierre Harlé
From Business to Buttons by Pierre Harlé
Idean France224 vues
RX Swift avril 2017 - David Yang par Idean France
RX Swift avril 2017 - David YangRX Swift avril 2017 - David Yang
RX Swift avril 2017 - David Yang
Idean France340 vues
FLUPA - UX Days 2016 : "Quand les militaires se prennent au jeu du Design Spr... par Idean France
FLUPA - UX Days 2016 : "Quand les militaires se prennent au jeu du Design Spr...FLUPA - UX Days 2016 : "Quand les militaires se prennent au jeu du Design Spr...
FLUPA - UX Days 2016 : "Quand les militaires se prennent au jeu du Design Spr...
Idean France559 vues
How to design forms that deliver a great user experience par Idean France
How to design forms that deliver a great user experienceHow to design forms that deliver a great user experience
How to design forms that deliver a great user experience
Idean France3K vues
The top 9 Tech trends for 2016 par Idean France
The top 9 Tech trends for 2016The top 9 Tech trends for 2016
The top 9 Tech trends for 2016
Idean France2K vues

Sirikit par Julien Coudsi

  • 1. SIRIKIT COCOAHEADS - MONTPELLIER – 17 NOVEMBRE 2016
  • 2. AU SOMMAIRE… • Quoi de neuf ? • Traiter une demande • Ajouter du vocabulaire • Personnaliser l’affichage • Démo 28.11.16 BACKELITE 2
  • 4. QUOI DE NEUF AVEC SIRIKIT ? 28.11.16 BACKELITE 4 • A partir d’iOS 10, Siri s’ouvre aux applications tierces • Domaines disponibles :  Réservation de véhicule  Messages  Photos  Paiements  Communication audio et vidéo  Fitness  Restaurants (avec Plans)  Carplay
  • 6. PRE-REQUIS 28.11.16 BACKELITE 6 • Une application iOS existante • Implémenter le code de l’application utilisé par Siri dans un framework • Utiliser un conteneur partagé pour les ressources communes • iOS 10 / Xcode 8
  • 7. COMMENT CA MARCHE ? 28.11.16 BACKELITE 7 • Utilisation d’une Intents Extension • Un « intent » correspond à une demande de l’utilisateur INExtension Intent handler B 1 - Resolve « Envoi un message » 2 - Confirm 3 - Handle Action INIntentResponse INIntent Intent handler A
  • 8. INTENTS ET DOMAINES A chaque domaine sa liste d’intents : • Messages o INSendMessageIntent o INSearchForMessagesIntent o INSetMessagesAttributes • Paiements o INSendPaymentIntent o INRequestPaymentIntent etc …
  • 9. CONFIGURATION DU PROJET 28.11.16 BACKELITE 9 • Info.plist de l’extension • Autoriser l’application à utiliser Siri • Capability Siri activée • App id supportant SiriKit • Info.plist de l’application
  • 10. INEXTENSION 28.11.16 BACKELITE 10 • Point d’entrée de l’extension • Appelle le bon intent handler class IntentExtension: INExtension { override func handler(for intent: INIntent) -> Any? { if intent is INSendMessageIntent { return MessagesIntentHandler() } else if intent is INStartAudioCallIntent { return AudioCallIntentHandler() } else { return nil } } }
  • 11. INTENT HANDLER - RESOLVE 28.11.16 BACKELITE 11 • Vérification des paramètres de l’intent • Peut solliciter l’utilisateur pour des précisions func resolveRecipients(forSendMessage intent: INSendMessageIntent, with completion: @escaping ([INPersonResolutionResult]) -> Void) { guard let recipients = intent.recipients else { return } if recipients.count == 0 { completion([INPersonResolutionResult.needsValue()]) } else { completion([INPersonResolutionResult.success(with: recipients[0])]) } }
  • 12. INTENT HANDLER - CONFIRM 28.11.16 BACKELITE 12 • Validation finale de l’intent avant son traitement • Sollicite l’utilisateur dans certains cas : • Demandes irréversibles • Transactions financières func confirm(sendMessage intent: INSendMessageIntent, completion: @escaping (INSendMessageIntentResponse) -> Void) { completion(INSendMessageIntentResponse(code: .ready, userActivity: nil)) }
  • 13. INTENT HANDLER - HANDLE 28.11.16 BACKELITE 13 • Réalise la tâche associée à l’intent • Renvoie une réponse func handle(sendMessage intent: INSendMessageIntent, completion: @escaping (INSendMessageIntentResponse) -> Void) { var success = false if let recipients = intent.recipients { success = ContactsManager.sharedManager.sendMessage(to: recipients) } completion(INSendMessageIntentResponse(code: success ? .success : .failure, userActivity: nil)) }
  • 15. VOCABULAIRE SPECIFIQUE A UN UTILISATEUR 28.11.16 BACKELITE 15 • Restreint aux catégories suivantes :  Noms de contacts  Groupes de contact  Tags de photo  Noms d’albums photos  Noms d’exercices (fitness)  Profils de voiture (CarPlay) DispatchQueue(label: "SiriVocabulary").async { let contactNicknames:NSOrderedSet = ["JeanMi", "Zozor", "Blop", "Toto"] INVocabulary.shared().setVocabularyStrings(contactNicknames, of: .contactName) } • Utilise l’API INVocabulary depuis l’application
  • 16. VOCABULAIRE COMMUN A TOUS LES UTILISATEURS 28.11.16 BACKELITE 16 • Utilise le fichier AppIntentVocabulary.plist • Restreint aux catégories suivantes :  Options de réservation d’un véhicule  Noms d’exercices (fitness)
  • 19. PRINCIPE 28.11.16 BACKELITE 19 • Enrichir l’interface lors des échanges avec l’utilisateur • Utilisation d’une Intents UI Extension • Restreint aux domaines suivants  Messages  Paiements  Réservation de véhicule  Fitness
  • 20. CONFIGURATION DU PROJET 28.11.16 BACKELITE 20 • Info.plist de l’extension • Ajout du storyboard et d’un unique ViewController associé
  • 21. CONFIGURATION DU VIEW CONTROLLER 28.11.16 BACKELITE 21 • Implémentation du protocole INUIHostedViewControlling func configure(with interaction: INInteraction!, context: INUIHostedViewContext, completion: ((CGSize) -> Void)!) { ... if let completion = completion { completion(self.extensionContext!.hostedViewMaximumAllowedSize) } } • Implémentation du protocole INUIHostedViewSiriProviding pour masquer la vue par défaut dans Siri var displaysMessage: Bool { return true }
  • 22. DEMO

Notes de l'éditeur

  1. IntentsSupported : intents supportés IntentsRestrictedWhileLocked : intents supportés nécessitant que le device soit déverouillé S’il y a ambiguité, SiriKit utilise l’ordre des intents dans « IntentsSupported » , il faut mettre le plus pertinent en premier. Important notamment si l’extension supporte plusieurs domaines avec des sémantiques similaires (par exemple envoi de message et appel audio)
  2. Peut solliciter l’utilisateur pour des précisions Demander des précisions seulement si nécessaire, sinon c’est frustrant pour l’utilisateur
  3. Par exemple, si on a besoin d’Internet, vérification de la connectivité
  4. Ajout = lance l’animation Pour stopper : on enlève l’animation du layer
  5. Ajout = lance l’animation Pour stopper : on enlève l’animation du layer
  6. Ajout = lance l’animation Pour stopper : on enlève l’animation du layer
  7. Ajout = lance l’animation Pour stopper : on enlève l’animation du layer
  8. Ajout = lance l’animation Pour stopper : on enlève l’animation du layer
  9. Ajout = lance l’animation Pour stopper : on enlève l’animation du layer