SlideShare una empresa de Scribd logo
1 de 23
Descargar para leer sin conexión
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

Más contenido relacionado

La actualidad más candente

Un exemple élémentaire d'application MVC en PHP
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
 
Javascript - Tableaux : que fait ce code ?
Javascript - Tableaux : que fait ce code ?Javascript - Tableaux : que fait ce code ?
Javascript - Tableaux : que fait ce code ?Ruau Mickael
 
Php mysql cours
Php mysql coursPhp mysql cours
Php mysql courszan
 
CocoaHeads Rennes #13 : Magical Record
CocoaHeads Rennes #13 : Magical RecordCocoaHeads Rennes #13 : Magical Record
CocoaHeads Rennes #13 : Magical RecordCocoaHeadsRNS
 
Cours php & Mysql - 2éme partie
Cours php & Mysql - 2éme partieCours php & Mysql - 2éme partie
Cours php & Mysql - 2éme partiekadzaki
 
Web-In 2010: Programmation Native iOS (French)
Web-In 2010: Programmation Native iOS (French)Web-In 2010: Programmation Native iOS (French)
Web-In 2010: Programmation Native iOS (French)Fred Brunel
 
Tout sur PHP 7.3 et ses RFC
Tout sur PHP 7.3 et ses RFCTout sur PHP 7.3 et ses RFC
Tout sur PHP 7.3 et ses RFCDamien Seguy
 

La actualidad más candente (12)

Un exemple élémentaire d'application MVC en PHP
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 PHP
 
Promises Javascript
Promises JavascriptPromises Javascript
Promises Javascript
 
Javascript - Tableaux : que fait ce code ?
Javascript - Tableaux : que fait ce code ?Javascript - Tableaux : que fait ce code ?
Javascript - Tableaux : que fait ce code ?
 
Php mysql cours
Php mysql coursPhp mysql cours
Php mysql cours
 
Plugins Xcode
Plugins XcodePlugins Xcode
Plugins Xcode
 
Marzouk-HTTP-SESSION-JEE
Marzouk-HTTP-SESSION-JEEMarzouk-HTTP-SESSION-JEE
Marzouk-HTTP-SESSION-JEE
 
Cours php
Cours phpCours php
Cours php
 
Marzouk jsp
Marzouk jspMarzouk jsp
Marzouk jsp
 
CocoaHeads Rennes #13 : Magical Record
CocoaHeads Rennes #13 : Magical RecordCocoaHeads Rennes #13 : Magical Record
CocoaHeads Rennes #13 : Magical Record
 
Cours php & Mysql - 2éme partie
Cours php & Mysql - 2éme partieCours php & Mysql - 2éme partie
Cours php & Mysql - 2éme partie
 
Web-In 2010: Programmation Native iOS (French)
Web-In 2010: Programmation Native iOS (French)Web-In 2010: Programmation Native iOS (French)
Web-In 2010: Programmation Native iOS (French)
 
Tout sur PHP 7.3 et ses RFC
Tout sur PHP 7.3 et ses RFCTout sur PHP 7.3 et ses RFC
Tout sur PHP 7.3 et ses RFC
 

Destacado

UI Design Trends for 2017
UI Design Trends for 2017UI Design Trends for 2017
UI Design Trends for 2017Idean France
 
Rendering unit tests par Nicolas Fontaine
Rendering unit tests par Nicolas FontaineRendering unit tests par Nicolas Fontaine
Rendering unit tests par Nicolas FontaineIdean France
 
Tendances du Design d'Interface 2017
Tendances du Design d'Interface 2017Tendances du Design d'Interface 2017
Tendances du Design d'Interface 2017Idean France
 
A developer who knows how to design by Audrey Hacq
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
 
Cocoaheads Montpellier Meetup : 3D Touch for iOS
Cocoaheads Montpellier Meetup : 3D Touch for iOSCocoaheads Montpellier Meetup : 3D Touch for iOS
Cocoaheads Montpellier Meetup : 3D Touch for iOSIdean France
 
Meetup CocoaHeads Montpellier : conférence sur l'Auto Layout
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
 
Opérer un unbundling : 6 questions que les marques doivent se poser
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 poserIdean 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}
App groups, faire communiquer ses applications {Cocoaheads Montpellier}Idean France
 
Programmation Orientée Protocole {Cocoaheads Montpellier}
Programmation Orientée Protocole {Cocoaheads Montpellier}Programmation Orientée Protocole {Cocoaheads Montpellier}
Programmation Orientée Protocole {Cocoaheads Montpellier}Idean France
 
CA Layer / Core Animation {Cocoaheads Montpellier}
CA Layer / Core Animation {Cocoaheads Montpellier}CA Layer / Core Animation {Cocoaheads Montpellier}
CA Layer / Core Animation {Cocoaheads Montpellier}Idean France
 
Cocoaheads Montpellier Meetup : Comment gérer son onboarding
Cocoaheads Montpellier Meetup : Comment gérer son onboardingCocoaheads Montpellier Meetup : Comment gérer son onboarding
Cocoaheads Montpellier Meetup : Comment gérer son onboardingIdean 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 /...
Cocoaheads Montpellier Meetup : L'analyse de Code Statique avec Objective-C /...Idean France
 
CocoaPods par David Yang
CocoaPods par David YangCocoaPods par David Yang
CocoaPods par David YangIdean France
 
Un développeur sachant designer par Audrey Hacq
Un développeur sachant designer par Audrey HacqUn développeur sachant designer par Audrey Hacq
Un développeur sachant designer par Audrey HacqIdean 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...
Les Formulaires - Les bonnes pratiques pour une meilleure expérience utilisat...Idean France
 
Les 10 Tendances du Design d'interface en 2016
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 2016Idean France
 
Les 5 Tendances de la Performance Digitale en 2016
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 2016Idean France
 
Les 9 Tendances Tech en 2016
Les 9 Tendances Tech en 2016Les 9 Tendances Tech en 2016
Les 9 Tendances Tech en 2016Idean France
 
Les 10 tendances de la User Experience en 2015
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 2015Idean France
 
Les bonnes pratiques du e-commerce
Les bonnes pratiques du e-commerceLes bonnes pratiques du e-commerce
Les bonnes pratiques du e-commerceUX REPUBLIC
 

Destacado (20)

UI Design Trends for 2017
UI Design Trends for 2017UI Design Trends for 2017
UI Design Trends for 2017
 
Rendering unit tests par Nicolas Fontaine
Rendering unit tests par Nicolas FontaineRendering unit tests par Nicolas Fontaine
Rendering unit tests par Nicolas Fontaine
 
Tendances du Design d'Interface 2017
Tendances du Design d'Interface 2017Tendances du Design d'Interface 2017
Tendances du Design d'Interface 2017
 
A developer who knows how to design by Audrey Hacq
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
 
Cocoaheads Montpellier Meetup : 3D Touch for iOS
Cocoaheads Montpellier Meetup : 3D Touch for iOSCocoaheads Montpellier Meetup : 3D Touch for iOS
Cocoaheads Montpellier Meetup : 3D Touch for iOS
 
Meetup CocoaHeads Montpellier : conférence sur l'Auto Layout
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
 
Opérer un unbundling : 6 questions que les marques doivent se poser
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
 
App groups, faire communiquer ses applications {Cocoaheads Montpellier}
App groups, faire communiquer ses applications {Cocoaheads Montpellier}App groups, faire communiquer ses applications {Cocoaheads Montpellier}
App groups, faire communiquer ses applications {Cocoaheads Montpellier}
 
Programmation Orientée Protocole {Cocoaheads Montpellier}
Programmation Orientée Protocole {Cocoaheads Montpellier}Programmation Orientée Protocole {Cocoaheads Montpellier}
Programmation Orientée Protocole {Cocoaheads Montpellier}
 
CA Layer / Core Animation {Cocoaheads Montpellier}
CA Layer / Core Animation {Cocoaheads Montpellier}CA Layer / Core Animation {Cocoaheads Montpellier}
CA Layer / Core Animation {Cocoaheads Montpellier}
 
Cocoaheads Montpellier Meetup : Comment gérer son onboarding
Cocoaheads Montpellier Meetup : Comment gérer son onboardingCocoaheads Montpellier Meetup : Comment gérer son onboarding
Cocoaheads Montpellier Meetup : Comment gérer son onboarding
 
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 /...
Cocoaheads Montpellier Meetup : L'analyse de Code Statique avec Objective-C /...
 
CocoaPods par David Yang
CocoaPods par David YangCocoaPods par David Yang
CocoaPods par David Yang
 
Un développeur sachant designer par Audrey Hacq
Un développeur sachant designer par Audrey HacqUn développeur sachant designer par Audrey Hacq
Un développeur sachant designer par Audrey Hacq
 
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...
Les Formulaires - Les bonnes pratiques pour une meilleure expérience utilisat...
 
Les 10 Tendances du Design d'interface en 2016
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
 
Les 5 Tendances de la Performance Digitale en 2016
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
 
Les 9 Tendances Tech en 2016
Les 9 Tendances Tech en 2016Les 9 Tendances Tech en 2016
Les 9 Tendances Tech en 2016
 
Les 10 tendances de la User Experience en 2015
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
 
Les bonnes pratiques du e-commerce
Les bonnes pratiques du e-commerceLes bonnes pratiques du e-commerce
Les bonnes pratiques du e-commerce
 

Similar a Sirikit par Julien Coudsi

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)
Gérer un parc de téléphones (Droidcon Tunisia 2014)Sidereo
 
PROFIL IOS DISPONIBLE
PROFIL IOS DISPONIBLEPROFIL IOS DISPONIBLE
PROFIL IOS DISPONIBLEClementine D.
 
NodeJS for Mobile App
NodeJS for Mobile AppNodeJS for Mobile App
NodeJS for Mobile AppHabib MAALEM
 
Paris ember js lab #6 - Taking over server-side rendering websites
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
 
Mettez du temps réel dans votre Drupal avec Node JS
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
 
Construire une Application Mobile en 30 minutes avec le plugin WP-AppKit
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-AppKituncatcrea
 
Node.js, le pavé dans la mare
Node.js, le pavé dans la mareNode.js, le pavé dans la mare
Node.js, le pavé dans la mareValtech
 
Stage de fin d’études – dotcloud
Stage de fin d’études – dotcloudStage de fin d’études – dotcloud
Stage de fin d’études – dotcloudJoffrey Fu Hrer
 
Stage de fin d’études – dotcloud
Stage de fin d’études – dotcloudStage de fin d’études – dotcloud
Stage de fin d’études – dotcloudJoffrey Fu Hrer
 
Android - TPBonus - web services
Android - TPBonus - web servicesAndroid - TPBonus - web services
Android - TPBonus - web servicesLilia Sfaxi
 
SPA avec Angular et SignalR (FR)
SPA avec Angular et SignalR (FR)SPA avec Angular et SignalR (FR)
SPA avec Angular et SignalR (FR)Rui Carvalho
 
Rapport app mobile ionic3 my gallery
Rapport app mobile ionic3 my galleryRapport app mobile ionic3 my gallery
Rapport app mobile ionic3 my galleryMOHAMMED MOURADI
 
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp012014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01MongoDB
 

Similar a Sirikit par Julien Coudsi (16)

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)
Gérer un parc de téléphones (Droidcon Tunisia 2014)
 
PROFIL IOS DISPONIBLE
PROFIL IOS DISPONIBLEPROFIL IOS DISPONIBLE
PROFIL IOS DISPONIBLE
 
NodeJS for Mobile App
NodeJS for Mobile AppNodeJS for Mobile App
NodeJS for Mobile App
 
TP_1.pdf
TP_1.pdfTP_1.pdf
TP_1.pdf
 
Paris ember js lab #6 - Taking over server-side rendering websites
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
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
 
Formation mobile-cross-platform
Formation mobile-cross-platformFormation mobile-cross-platform
Formation mobile-cross-platform
 
Construire une Application Mobile en 30 minutes avec le plugin WP-AppKit
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
 
Node.js, le pavé dans la mare
Node.js, le pavé dans la mareNode.js, le pavé dans la mare
Node.js, le pavé dans la mare
 
Stage de fin d’études – dotcloud
Stage de fin d’études – dotcloudStage de fin d’études – dotcloud
Stage de fin d’études – dotcloud
 
Stage de fin d’études – dotcloud
Stage de fin d’études – dotcloudStage de fin d’études – dotcloud
Stage de fin d’études – dotcloud
 
Android - TPBonus - web services
Android - TPBonus - web servicesAndroid - TPBonus - web services
Android - TPBonus - web services
 
SPA avec Angular et SignalR (FR)
SPA avec Angular et SignalR (FR)SPA avec Angular et SignalR (FR)
SPA avec Angular et SignalR (FR)
 
Rapport app mobile ionic3 my gallery
Rapport app mobile ionic3 my galleryRapport app mobile ionic3 my gallery
Rapport app mobile ionic3 my gallery
 
Support developpement applications mobiles avec ionic v3 et v4
Support developpement applications mobiles avec ionic v3 et v4Support developpement applications mobiles avec ionic v3 et v4
Support developpement applications mobiles avec ionic v3 et v4
 
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp012014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01
 

Más de Idean France

Start with a Concept and Stop Designing like a Machine
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
 
Design Systems : à votre marque, prêts, partez !
Design Systems : à votre marque, prêts, partez !Design Systems : à votre marque, prêts, partez !
Design Systems : à votre marque, prêts, partez !Idean France
 
Design systems : Bench et reco sur les outils
Design systems : Bench et reco sur les outilsDesign systems : Bench et reco sur les outils
Design systems : Bench et reco sur les outilsIdean France
 
La recette graphique
La recette graphiqueLa recette graphique
La recette graphiqueIdean France
 
Graph QL par Andy Gigon
Graph QL par Andy GigonGraph QL par Andy Gigon
Graph QL par Andy GigonIdean France
 
Cocoheads react native + redux par Nicolas Fontaine
Cocoheads   react native + redux par Nicolas FontaineCocoheads   react native + redux par Nicolas Fontaine
Cocoheads react native + redux par Nicolas FontaineIdean France
 
Meetup langages visuels - Backelite - novembre 2017
Meetup langages visuels - Backelite - novembre 2017Meetup langages visuels - Backelite - novembre 2017
Meetup langages visuels - Backelite - novembre 2017Idean 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 ?
Sketch pour les designers : pourquoi, quand et comment l'utiliser ?Idean France
 
From Business to Buttons by Pierre Harlé
From Business to Buttons by Pierre HarléFrom Business to Buttons by Pierre Harlé
From Business to Buttons by Pierre HarléIdean France
 
RX Swift avril 2017 - David Yang
RX Swift avril 2017 - David YangRX Swift avril 2017 - David Yang
RX Swift avril 2017 - David YangIdean 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...
FLUPA - UX Days 2016 : "Quand les militaires se prennent au jeu du Design Spr...Idean France
 
How to design forms that deliver a great user experience
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 experienceIdean France
 
The top 9 Tech trends for 2016
The top 9 Tech trends for 2016The top 9 Tech trends for 2016
The top 9 Tech trends for 2016Idean France
 

Más de Idean France (13)

Start with a Concept and Stop Designing like a Machine
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
 
Design Systems : à votre marque, prêts, partez !
Design Systems : à votre marque, prêts, partez !Design Systems : à votre marque, prêts, partez !
Design Systems : à votre marque, prêts, partez !
 
Design systems : Bench et reco sur les outils
Design systems : Bench et reco sur les outilsDesign systems : Bench et reco sur les outils
Design systems : Bench et reco sur les outils
 
La recette graphique
La recette graphiqueLa recette graphique
La recette graphique
 
Graph QL par Andy Gigon
Graph QL par Andy GigonGraph QL par Andy Gigon
Graph QL par Andy Gigon
 
Cocoheads react native + redux par Nicolas Fontaine
Cocoheads   react native + redux par Nicolas FontaineCocoheads   react native + redux par Nicolas Fontaine
Cocoheads react native + redux par Nicolas Fontaine
 
Meetup langages visuels - Backelite - novembre 2017
Meetup langages visuels - Backelite - novembre 2017Meetup langages visuels - Backelite - novembre 2017
Meetup langages visuels - Backelite - novembre 2017
 
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 ?
Sketch pour les designers : pourquoi, quand et comment l'utiliser ?
 
From Business to Buttons by Pierre Harlé
From Business to Buttons by Pierre HarléFrom Business to Buttons by Pierre Harlé
From Business to Buttons by Pierre Harlé
 
RX Swift avril 2017 - David Yang
RX Swift avril 2017 - David YangRX Swift avril 2017 - David Yang
RX Swift avril 2017 - David Yang
 
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...
FLUPA - UX Days 2016 : "Quand les militaires se prennent au jeu du Design Spr...
 
How to design forms that deliver a great user experience
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
 
The top 9 Tech trends for 2016
The top 9 Tech trends for 2016The top 9 Tech trends for 2016
The top 9 Tech trends for 2016
 

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

Notas del editor

  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