Une introduction au transfert

introduction

Avec iOS 8 et OS X Yosemite, Apple a introduit une nouvelle fonctionnalité intéressante destinée aux développeurs pour, Remise. Le transfert permet aux applications de transférer des données et des informations sur l'état des applications d'un périphérique à un autre via Bluetooth. Cela permet aux utilisateurs de vos applications de commencer une tâche sur l'un de leurs appareils, puis de la poursuivre de manière transparente sur un autre.

Par exemple, commencez par écrire un message sur votre iPhone, puis terminez et envoyez le même message sur votre iPad. Dans ce tutoriel, je vais vous montrer comment adopter Handoff dans vos propres applications via une application de prise de notes très simple..

Ce tutoriel nécessite que vous exécutiez Xcode 6+ et que vous disposiez de deux appareils compatibles Handoff. Tous les appareils iOS 8 ne disposent pas de Bluetooth LE (Low Energy), requis pour le transfert. Cette fonctionnalité est donc uniquement disponible et ne peut être testée que sur les appareils suivants:

  • iPhone 5 et ultérieur
  • iPad 4ème génération, y compris tous les modèles d'iPad Air
  • ipad mini
  • iPod Touch 5ème génération

Pendant les tests, vous devez vous connecter au même compte iCloud sur chaque appareil et activer le transfert dans les paramètres de l'appareil..

1. Configuration du projet

Créez un nouveau projet dans Xcode et choisissez le Application à vue unique modèle de la iOS> Application section.

Configurez le projet comme indiqué ci-dessous. Notez que La langue est réglé sur Rapide et Dispositifs est réglé sur Universel.

Une fois que Xcode a créé votre projet, ouvrez ViewController.swift et remplacer la mise en œuvre de la ViewController classe avec l'implémentation suivante:

classe ViewController: UIViewController, UITextFieldDelegate, UITextViewDelegate var noteTitleField: UITextField! var noteContentView: UITextView! override func viewDidAppear (animation: Bool) self.noteTitleField = UITextField (cadre: CGRect (x: 12, y: 28, largeur: self.view.frame.width - 22, hauteur: 20)) self.noteTitleField.placeholder = "Titre de note" self.noteTitleField.delegate = self self.noteContentView = UITextView (cadre: CGRect (x: 8, y: 56, largeur: self.view.frame.width - 16, hauteur: self.view.frame.height - 64)) self.noteContentView.text = "Contenu de la note" self.noteContentView.delegate = self self.view.addSubview (self.noteTitleField) self.view.addSubview (self.noteContentView) func textViewDidBeginEditing (textView: UIText) if textView.text == "Note Content" textView.text = "" redéfinit func viewDidLoad () super.viewDidLoad () // Effectue une configuration supplémentaire après le chargement de la vue, généralement à partir d'un nib. 

La mise en œuvre est assez simple. Ça fait la ViewController la classe adopte les deux UITextFieldDelegate et UITextViewDelegate protocoles, et il ajoute un UITextField et UITextView à la vue du contrôleur de vue pour la saisie de texte.

Générez et exécutez votre application sur l’un de vos appareils de test. Une interface utilisateur très basique avec deux champs de saisie, un champ de texte pour le titre et une vue pour le contenu de la note doivent s'afficher..

2. Configuration du transfert

Les activités transférées entre appareils avec Handoff sont modélisées par le NSUserActivity classe. Vous en apprendrez plus sur cette classe et sur son utilisation plus tard dans ce tutoriel. Tout d'abord, votre application doit être configurée pour créer ces activités avec succès.

Chaque type d'activité que votre application prend en charge doit recevoir un identifiant unique, similaire à la manière dont chaque application iOS possède son propre identifiant unique. Ces identifiants peuvent être ce que vous voulez, mais la meilleure pratique consiste à utiliser la notation DNS inversée, telle que com.tutsplus.handoff-introduction.note. L'instance de l'application qui s'exécute sur chaque périphérique doit également être signée par la même équipe de développement iOS pour que les activités soient correctement reconnues..

Vous devez d’abord ajouter les identificateurs d’activité que votre application prend en charge à la cible. Info.plist. Ouvrir la cible Info.plist et ajoutez le NSUserActivityTypes clé. Faire de cet article un Tableau et ajouter un seul article, com.tutsplus.handoff-introduction.note, comme indiqué dans la capture d'écran ci-dessous.

Ensuite, sélectionnez le projet dans le Navigateur de projet et, dans l’éditeur à droite, ouvrez le Général languette. dans le Identité section, ensemble Équipe à la bonne équipe de développement iOS.

Une fois ces étapes terminées, votre application est prête à utiliser Handoff si vous êtes connecté au même compte iCloud et connecté au même réseau Wi-Fi sur chacun de vos appareils de test..

3. Envoi d'une activité utilisateur

Ensuite, vous devez ajouter du code pour que l'activité de l'utilisateur soit envoyée d'un périphérique à un autre. Mettre à jour le viewDidLoad méthode du ViewController classe comme ci-dessous.

Fonction de remplacement ViewDidLoad () super.viewDidLoad () let activity = NSUserActivity (activityType: "com.tutsplus.handoff-introduction.note") activity.title = "Note" activity.userInfo = ["title": "", " content ":" "] userActivity = activity userActivity? .becomeCurrent ()

Cela crée une base NSUserActivity objet avec l'identifiant que vous avez ajouté à celui de votre cible Info.plist plus tôt. Vous donnez à cet objet d'activité un Titre et un informations utilisateur dictionnaire avec des valeurs de chaîne vides pour la Titre et contenu clés.

Dans ce tutoriel, nous allons mettre des chaînes dans l'activité de notre activité. informations utilisateur dictionnaire. Cependant, vous pouvez ajouter n’importe quel type de liste de propriétés, tels que des nombres, des tableaux et des dictionnaires, ainsi que tout type de liste de propriétés. NSCoding objet conforme.

Vous affectez ensuite cette nouvelle activité au activité de l'utilisateur propriété de votre ViewController exemple pour que l’API Handoff ait une référence. le UIViewController la classe hérite de cette propriété du UIResponder classe.

Enfin, vous appelez devenir courant sur l'objet d'activité pour indiquer au système qu'il s'agit de l'activité utilisateur actuelle à envoyer par l'application.

Vous avez maintenant configuré votre activité utilisateur avec succès, mais nous devons également la remplir avec du contenu au fur et à mesure que l'utilisateur écrit sa note. Pour ce faire, nous mettons à jour l'activité de l'utilisateur actuel en remplaçant le updateUserActivityState (_ :) méthode dans le ViewController classe. Cette méthode est appelée périodiquement par l'API Handoff pour mettre à jour l'activité de l'utilisateur actuel. Ajoutez le code suivant au ViewController classe.

Remplacer func updateUserActivityState (activité: NSUserActivity) activity.addUserInfoEntriesFromDictionary (["titre": self.noteTitleField.text) gamme: NSRange, replacementString string: String) -> Bool self.updateUserActivityState (userActivity!) return true func textView (textView: UITextView, shouldChangeTextInRange gamme: NSRange, replacementText text: String) -> Bool self.updateUserActivityActivity ) retourne vrai

le updateUserActivityState (_ :) méthode nous donne une référence à l’activité de l’utilisateur en cours et remplace les valeurs de la informations utilisateur dictionnaire avec les dernières valeurs de votre application. Notez que nous invoquons également cette méthode sur la superclasse.

Nous avons également mis en œuvre deux autres méthodes, textField (_: shouldChangeCharactersInRange: replacementString :) du UITextFieldDelegate protocole et textView (_: shouldChangeTextInRange: replacementText :) du UITextViewDelegate protocole. Dans ces méthodes, nous mettons à jour l'activité de l'utilisateur actuel chaque fois que le texte de l'un des champs de saisie change. Bien que cela ne soit pas nécessaire, cela garantit que votre activité contiendra toujours les dernières informations..

Vous êtes maintenant prêt à tester votre application avec Handoff. Générez et exécutez votre application sur vos deux appareils de test. Appuyez sur le bouton de verrouillage d'un appareil pour le mettre en veille tout en maintenant l'application ouverte sur l'autre. Réveillez le périphérique que vous venez de verrouiller et vous devriez voir l'icône de l'application apparaître dans le coin inférieur gauche de l'écran de verrouillage. Effectuez un geste de balayage sur cette icône et votre application reprendra via le transfert..

Vous pouvez également double-cliquer sur le bouton d'accueil pour entrer dans le commutateur d'applications. Votre application compatible Handoff apparaîtra à gauche de l'écran d'accueil. Pour le moment, votre application ne reprend que la même interface vierge. Réglons ça maintenant.

4. Restauration à partir d'une activité utilisateur

Restaurer une application à partir d'un transfert NSUserActivity est traité par votre délégué à l'application. Le délégué de l'application passe ensuite l'objet d'activité utilisateur au contrôleur de vue racine de l'application pour se restaurer. Si le contrôleur de vue qui doit traiter l'activité n'est pas le contrôleur de vue racine de votre application, vous le transmettez simplement du contrôleur de vue racine à la hiérarchie du contrôleur de vue jusqu'à ce que vous atteigniez l'emplacement souhaité dans votre application..

Ouvrir AppDelegate.swift et ajoutez la méthode suivante à la AppDéléguer classe:

application func (application: UIApplication, continueUserActivity userActivity: NSUserActivity, restaurationHandler: ([AnyObject]!) -> Void) -> Bool self.window? .rootViewController? .restoreUserActivityState (userActivity) (returnActive true)

Dans cette méthode, vous passez l'objet d'activité utilisateur au contrôleur de vue racine de l'application et, en renvoyant vrai, vous indiquez à l'application que vous avez bien reçu et traité l'activité de l'utilisateur Handoff.

Ensuite, ouvrez ViewController.swift et ajoutez la méthode suivante à la ViewController classe:

Remplacez func restoreUserActivityState (activity: NSUserActivity) self.noteTitleField.text = activity.userInfo? ["title"] en tant que! String self.noteContentView.text = activity.userInfo? ["Content"] en tant que! Chaîne 

Semblable à la updateUserActivityState (_ :) méthode de ce didacticiel, vous remplacez la restoreUserActivityState (_ :) méthode afin de récupérer les informations de la NSUserActivity objet. Dans votre implémentation de cette méthode, vous mettez à jour vos deux champs d’entrée avec les données stockées dans l’objet d’activité utilisateur..

Générez et exécutez votre application sur vos deux appareils de test et commencez à rédiger une note sur un seul appareil. Depuis l'écran de verrouillage ou le commutateur d'applications sur votre autre appareil, ouvrez l'application via Handoff et vous devriez voir le texte que vous aviez écrit sur votre premier appareil sur votre deuxième appareil..

5. Traitement des erreurs et méthodes de délégation

Contrairement à de nombreuses API fournies par Apple pour iOS, la gestion des erreurs n’est pas facile lorsque vous utilisez Handoff si vous ne savez pas où ces erreurs doivent être traitées. Le premier point auquel votre application sera avertie d'une erreur de transfert est via le application (_: didFailToContinueUserActivityWithType: error :) dans la classe de délégué de l'application. Dans cette méthode, vous pouvez déterminer la cause de l'erreur et le type d'activité associé à l'erreur. Notez que le type d'un NSUserActivity l'objet est le même que l'identifiant unique que vous lui attribuez.

Lorsque votre application poursuit une activité de transfert, elle doit d'abord télécharger les données associées à l'activité à partir du périphérique d'origine via Bluetooth. Avant que ce téléchargement ne soit terminé, une autre méthode de délégation d'application est appelée: application (_: willContinueUserActivityWithType :). Dans cette méthode facultative, vous pouvez renvoyer une valeur booléenne pour indiquer à l'API de transfert si vous souhaitez ou non continuer à recevoir l'activité de l'utilisateur. Dans certaines situations, cela peut être utile car vous pouvez désactiver un type particulier de NSUserActivity lorsque certaines conditions sont remplies.

Conclusion

Dans ce tutoriel, je vous ai montré comment utiliser le NSUserActivity classe pour adopter facilement Handoff dans vos propres applications iOS 8. Vous avez créé une application très simple, capable de transférer des données sans fil vers un autre appareil via Bluetooth..

Bien que l’exemple d’application que nous avons présenté dans ce didacticiel soit très simple, vos propres applications peuvent avoir autant de types d’activités que vous le souhaitez pour une grande variété de fonctionnalités. Comme toujours, si vous avez des commentaires ou des questions, laissez-les dans les commentaires ci-dessous.