Débuter avec HealthKit Partie 2

Dans la première partie de ce didacticiel, je vous ai présenté le cadre HealthKit. Sur la base de ma propre expérience d'intégration de HealthKit dans l'une de mes applications, j'ai souligné quelques points qu'il est important de garder à l'esprit. Nous avons également commencé à travailler sur notre exemple d'application, Bases Santé, qui expliquera les concepts de base du travail avec HealthKit.

Dans la première partie, nous avons implémenté le GSHealthKitManager classe, que nous utiliserons pour interagir avec HealthKit. Utilisons maintenant le GSHealthKitManager classe pour implémenter les fonctionnalités du premier contrôleur de vue de l'exemple d'application.

1. Implémentation du premier contrôleur de vue

dans le Navigateur de projet, ouvrir FirstViewController.m et remplacez son contenu par ce qui suit:

#import "FirstViewController.h" #import "GSHealthKitManager.h" @interface FirstViewController () @property (nonatomic, faible) IBOutlet UILabel * ageLabel; @property (nonatomic, faible) IBOutlet UITextField * weightTextField; @end @implementation FirstViewController - (IBAction) healthIntegrationButtonSwitched: (UISwitch *) sender if (sender.isOn) [[[GSHealthKitManager sharedManager] requestAuthorization]];  else // Désactivez éventuellement la fonctionnalité HealthKit dans votre application.  - (IBAction) readAgeButtonPressed: (id) expéditeur NSDate * birthDate = [[GSHealthKitManager sharedManager] readBirthDate]; if (birthDate == nil) // L'utilisateur n'a pas défini la date ou une erreur s'est produite. Il suffit de revenir. revenir;  NSDateComponents * ageComponents = [[NSCalendar currentCalendar] composants: NSCalendarUnitYear fromDate: birthDate toDate: [NSDate date] options: 0]; self.ageLabel.text = [@ (ageComponents.year) stringValue];  - (IBAction) writeWeightButtonPressed: (id) expéditeur [[[GSHealthKitManager sharedManager]] writeWeightSample: self.weightTextField.text.floatValue];  @fin 

Si vous avez une expérience de développement iOS, l'implémentation ne devrait pas être difficile à comprendre. Dans le premier contrôleur de vue, nous répondons à l'utilisateur en basculant le commutateur et en tapant sur l'un des boutons. Chacune de ces interactions déclenche une méthode de GSHealthKitManager classe.

Il y a une raison pour laquelle j'ai choisi d'utiliser un commutateur pour demander à l'utilisateur la permission d'accéder à ses données HealthKit. Une fois que vous aurez compris la mise en œuvre, vous comprendrez que c'est une bien meilleure solution..

Il est facile pour l'utilisateur de comprendre que, lorsque le commutateur est activé, l'application s'intègre à HealthKit. Quand c'est éteint, ça ne marche pas. De plus, l'activation initiale de cette option incitera l'utilisateur à accorder l'accès aux types de données de santé que l'application utilisera. Encore une fois, c’est une bonne expérience utilisateur, car l’utilisateur comprend pourquoi il est invité et quels sont les avantages qu’il obtient en permettant l’accès..

2. Connexion de l'interface utilisateur

dans le Navigateur de projet, ouvrir Tableau principal. Dans la première scène, sélectionnez le commutateur. dans le Utilitaires volet de droite, ouvrez le Inspecteur de connexions et dans le Événements envoyés section, faites glisser de Valeur modifiée au Premier Contrôleur de vue dans le Sommaire du document. Dans le menu contextuel répertoriant les actions du contrôleur de vue, sélectionnez healthIntegrationButtonSwitched:. Cela garantit la healthIntegrationButtonSwitched: la méthode est appelée chaque fois que le commutateur est basculé.

Les étapes pour connecter le Lis et Écrire les boutons sont presque identiques. Clique le Lis bouton, seulement cette fois, faites glisser depuis le Retouche à l'intérieur événement au premier contrôleur de vue. Sélectionnez le readAgeButtonPressed: action dans le menu contextuel.

Clique le Écrire bouton et faites glisser depuis le Retouche à l'intérieur événement au premier contrôleur de vue, sélectionnez le writeWeightButtonPressed: méthode dans le menu contextuel.

Nous devons maintenant connecter les prises déclarées aux éléments de l'interface utilisateur. presse Contrôle et faites glisser de Premier Contrôleur de vue à l'étiquette avec les deux points d'interrogation. Dans le menu contextuel intitulé Prises électriques, cliquer sur ageLabel. Cela va connecter la sortie à l'étiquette.

Répétez ces étapes pour le champ de texte en le connectant au weightTextField sortie du contrôleur de vue.

3. Construire et exécuter

La première scène devrait maintenant être pleinement fonctionnelle. Lancez l'application et allumez le commutateur. Vous devez être invité à utiliser l'interface utilisateur des autorisations HealthKit suivante:

Assurez-vous d’activer les deux interrupteurs avant de tapoter Terminé, sinon, votre application n'aura pas accès aux données dont nous avons besoin dans l'exemple d'application.

Vous pouvez maintenant essayer de toucher le Lis bouton. Si vous exécutez l'application dans le simulateur iOS, rien ne se passera probablement, car vous n'avez pas défini de date de naissance. Vous pouvez accéder à l'application Health dans le simulateur iOS et la configurer..

  • Ouvrez l'application Santé.
  • Sélectionner Données de santé languette.
  • Robinet Moi.
  • Robinet modifier.
  • Robinet Date de naissance et fixer une date. Robinet Terminé.

Vous pouvez maintenant revenir à notre application HealthBasics et appuyer sur le bouton Lis bouton à nouveau. Cette fois, votre âge devrait être affiché.

Vous pouvez également tester le partage de poids. Sélectionnez le champ de texte d'épaisseur et entrez une valeur en kilogrammes. Après avoir tapé Écrire, retournez à l'application Santé et, dans le Données de santé onglet, sélectionnez Mesures du corps et Poids. L'échantillon que vous venez d'ajouter doit être visible.


Jusqu'à présent, vous avez appris les bases du travail avec HealthKit..

  • comment demander la permission à l'utilisateur
  • comment lire et écrire des données de base
  • comment encapsuler du code lié à HealthKit dans une classe séparée

4. Ajouter un entraînement

Dans la deuxième partie de notre exemple d'application, je vais vous montrer comment écrire un entraînement pour HealthKit. Ceci est utile si vous construisez tout type d'application (course à pied, vélo, marche, etc.) application. La plupart des blocs de construction sont similaires.

Étape 1: extension de la GSHealthKitManager Classe

Nous commençons par étendre la GSHealthKitManager classe. Ajoutez la déclaration de méthode suivante à GSHealthKitManager.h:

- (void) writeWorkoutDataFromModelObject: (id) workoutModelObject;

Ajouter un nouveau type de partage au requestAuthorizationToShareTypes: readTypes: achèvement: méthode en ajoutant le type d'entraînement à la writeTypes tableau.

NSArray * writeTypes = @ [[HKObjectType quantityTypeForIdentifier: HKQuantityTypeIdentifierBodyMass], [HKObjectType workoutType]];

Enfin, ajoutez le writeWorkoutDataFromModelObject: méthode au bas de la GSHealthKitManager classe.

- (void) writeWorkoutDataFromModelObject: (id) workoutModelObject // Dans une application du monde réel, vous transmettez un objet de modèle représentant vos données d'entraînement, puis extrayez les données pertinentes ici et les transmettez à la méthode d'entraînement HealthKit. // Par souci de simplicité, nous allons définir des données arbitraires. NSDate * startDate = [NSDate date]; NSDate * endDate = [startDate dateByAddingTimeInterval: 60 * 60 * 2]; NSTimeInterval duration = [endDate timeIntervalSinceDate: startDate]; CGFloat distanceInMeters = 57000 .; HKQuantity * distanceQuantity = [Quantité de HKQuantity avec unité: [HKUnit meterUnit] doubleValue: (double) distanceInMeters]; HKWorkout * workout = [HKWorkout workoutWithActivityType: HKWorkoutActivityTypeRunning startDate: startDate endDate: endDate durée: durée totalEnergyBurned: nil totalDistance: distanceQuantity metadata: nil]; [self.healthStore saveObject: entraînement avec Complétion: ^ (succès BOOL, erreur NSError *) NSLog (@ "Enregistrement de l'exercice sur HealthStore - succès:% @", succès? @ "OUI": @ "NON"); if (erreur! = nil) NSLog (@ "erreur:% @", erreur); ]; 

Dans ma propre application, Routie, j’ai utilisé l’approche consistant à transmettre un objet de modèle au writeWorkoutDataFromModelObject: méthode, en déléguant le gros du travail à la classe de gestionnaires. Ce dernier extrait les données requises de l’objet modèle et transmet les informations à la HKHealthStore exemple. Je crois que c'est une bonne approche pour garder le code lié à HealthKit confiné dans la classe de gestionnaire.

La mise en œuvre de la writeWorkoutDataFromModelObject: la méthode est assez simple. Il n'y a que trois étapes:

  1. Nous préparons d’abord les données. Dans cet exemple, nous établissons les chiffres.
  2. Nous créons ensuite un HKWorkout object en invoquant l'un des initialiseurs de commodité de la classe.
  3. Enfin, nous sauvons le HKWorkout objecter à la HKHealthStore exemple.

C'est la première fois que nous travaillons avec la classe HKWorkout, alors laissez-moi vous présenter brièvement cette classe. Le framework HealthKit utilise le HKWorkout classe pour suivre les activités. Les entraînements sont pour la plupart immuables. Vous devez donc fournir les valeurs de l’entraînement pendant l’initialisation..

Lors de l'initialisation d'un entraînement, vous devez fournir un type d'activité, une date de début et une date de fin. Vous pouvez éventuellement indiquer la distance totale, l’énergie totale brûlée et les métadonnées. Les métadonnées peuvent être utilisées pour attribuer des informations supplémentaires à l'entraînement. Ceci est très utile lorsque vous souhaitez partager plus d'informations sur un entraînement avec une autre application que vous avez également créée..

Étape 2: Mise en œuvre du writeWorkoutButtonPressed: action

Ouvrir SecondViewController.m et ajoutez l'importation suivante en haut du fichier:

#import "GSHealthKitManager.h"

Ensuite, implémentez le writeWorkoutButtonPressed: méthode comme indiqué ci-dessous.

- (IBAction) writeWorkoutButtonPressed: (id) expéditeur // Dans une application du monde réel, vous obtiendrez une référence à un objet de modèle pertinent et le passerez à la méthode suivante. [[GSHealthKitManager sharedManager] requestAuthorization]; [[GSHealthKitManager sharedManager] writeWorkoutDataFromModelObject: nil]; 

Étape 3: Création de l'interface utilisateur d'entraînement

Nous allons simplement ajouter un seul bouton à la deuxième scène de l'application pour écrire l'entraînement. Ouvrir Tableau principal et se concentrer sur la deuxième scène. Supprimer les étiquettes actuellement présentes dans le contrôleur Second View.

Ajoutez un bouton au centre de la vue du contrôleur de vue et définissez son titre sur Ecrire séance d'entraînement. Connecter son Retouche à l'intérieur événement au writeWorkoutButtonPressed: action que nous avons mise en œuvre à l'étape précédente.

5. Test

Générez et exécutez l'application, puis activez le commutateur d'intégration d'intégrité. le Accès à la santé l’écran sera présenté avec le type d’entraînement nouvellement demandé désactivé. Allumez-le et appuyez sur Terminé. Cela n’est nécessaire que parce que nous avons ajouté le type de partage d’entraînement à la liste des types de partage. Cela signifie que nous devons demander la permission à l'utilisateur avant de l'utiliser..

Ouvrez le deuxième onglet en bas et appuyez sur Ecrire séance d'entraînement. Si tout s'est bien passé, le message suivant devrait s'afficher dans la console de Xcode:

Enregistrement de séance d'entraînement dans le magasin de santé - succès: OUI

Maintenant, vous pouvez passer à l'application de santé et aller à Données de santé > Aptitude > Séances d'entraînement. Là vous devriez voir la séance d'entraînement qui vient d'être ajoutée.

Conclusion

Dans ce tutoriel, je vous ai montré comment écrire un entraînement pour HealthKit. Je vous ai également montré comment séparer le code associé à HealthKit en passant un objet de modèle à la méthode qui écrit l'entraînement sur HealthKit..

J'espère que vous avez apprécié ce tutoriel et que vous avez appris toutes les bases nécessaires pour intégrer votre propre application à HealthKit. J'espère aussi que je vous ai convaincu d'essayer HealthKit.

Faites-moi savoir dans les commentaires si vous avez aimé ce tutoriel ou si quelque chose n'était pas clair. Vous pouvez aussi me trouver sur Twitter.

Liens

La liste ci-dessous comprend un certain nombre de liens pertinents pour que vous puissiez rapidement accéder à ce dont vous avez besoin:

  • Référence du cadre HealthKit d'Apple: Je recommande fortement de le lire.
  • Ajuster: stocker et récupérer des données HealthKit: exemple d'application HealthKit fourni par Apple
  • Directives de révision de l'App Store - HealthKit: la section des directives de révision de l'App Store couvrant HealthKit
  • Présentation de HealthKit (Vidéos de la session 2014 du WWDC)
  • Quoi de neuf dans HealthKit (Vidéos de la session WWDC 2015)