Sirikit par Julien Coudsi

95 vues

Publié le

Sirikit par Julien Coudsi

Publié dans : Mobile
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
95
Sur SlideShare
0
Issues des intégrations
0
Intégrations
0
Actions
Partages
0
Téléchargements
1
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive
  • 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)
  • Peut solliciter l’utilisateur pour des précisions
    Demander des précisions seulement si nécessaire, sinon c’est frustrant pour l’utilisateur
  • Par exemple, si on a besoin d’Internet, vérification de la connectivité
  • Ajout = lance l’animation
    Pour stopper : on enlève l’animation du layer
  • Ajout = lance l’animation
    Pour stopper : on enlève l’animation du layer
  • Ajout = lance l’animation
    Pour stopper : on enlève l’animation du layer
  • Ajout = lance l’animation
    Pour stopper : on enlève l’animation du layer
  • Ajout = lance l’animation
    Pour stopper : on enlève l’animation du layer
  • Ajout = lance l’animation
    Pour stopper : on enlève l’animation du layer
  • Sirikit par Julien Coudsi

    1. 1. SIRIKIT COCOAHEADS - MONTPELLIER – 17 NOVEMBRE 2016
    2. 2. AU SOMMAIRE… • Quoi de neuf ? • Traiter une demande • Ajouter du vocabulaire • Personnaliser l’affichage • Démo 28.11.16 BACKELITE 2
    3. 3. QUOI DE NEUF ?
    4. 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
    5. 5. TRAITER UNE DEMANDE
    6. 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. 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. 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. 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. 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. 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. 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. 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)) }
    14. 14. AJOUTER DU VOCABULAIRE
    15. 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. 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)
    17. 17. APPINTENTVOCABULARY.PLIST 28.11.16 BACKELITE 17
    18. 18. PERSONNALISER L’AFFICHAGE
    19. 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. 20. CONFIGURATION DU PROJET 28.11.16 BACKELITE 20 • Info.plist de l’extension • Ajout du storyboard et d’un unique ViewController associé
    21. 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. 22. DEMO
    23. 23. julien.coudsi@backelite.com www.backelite.com CONTACTEZ-NOUS COUDSI Julien Développeur iOS 28.11.16 BACKELITE 23

    ×