Dans la première partie de ce tutoriel, je vous ai présenté le framework 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, Santé, qui expliquera les concepts de base du travail avec HealthKit.
Dans la première partie, nous avons implémenté le GSHealthKitManager
class, que nous utiliserons pour interagir avec HealthKit. Utilisons maintenant le GSHealthKitManager
class pour implémenter la fonctionnalité du premier contrôleur de vue de l’exemple d’application.
1. Implémentation du contrôleur First View
dans le Navigateur de projet, ouvert FirstViewController.m et remplacez son contenu par ce qui suit:
#import "FirstViewController.h" #import "GSHealthKitManager.h" @interface FirstViewController () @property (nonatomic, weak) IBOutlet UILabel *ageLabel; @property (nonatomic, weak) IBOutlet UITextField *weightTextField; @end @implementation FirstViewController - (IBAction)healthIntegrationButtonSwitched:(UISwitch *)sender { if (sender.isOn) { [[GSHealthKitManager sharedManager] requestAuthorization]; } else { // Possibly disable HealthKit functionality in your app. } } - (IBAction)readAgeButtonPressed:(id)sender { NSDate *birthDate = [[GSHealthKitManager sharedManager] readBirthDate]; if (birthDate == nil) { // Either user didn't set the date, or an error occured. Simply return. return; } NSDateComponents *ageComponents = [[NSCalendar currentCalendar] components:NSCalendarUnitYear fromDate:birthDate toDate:[NSDate date] options:0]; self.ageLabel.text = [@(ageComponents.year) stringValue]; } - (IBAction)writeWeightButtonPressed:(id)sender { [[GSHealthKitManager sharedManager] writeWeightSample:self.weightTextField.text.floatValue]; } @end
Si vous avez une certaine expérience du développement iOS, la mise en œuvre ne devrait pas être difficile à comprendre. Dans le premier contrôleur de vue, nous répondons à l’utilisateur en basculant le commutateur et en appuyant 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 l’implémentation, vous comprendrez que c’est une bien meilleure solution.
Il est facile pour l’utilisateur de comprendre que, lorsque l’interrupteur est activé, l’application s’intègre à HealthKit. Quand il est éteint, ce n’est pas le cas. En plus de cela, activer ce commutateur pour la première fois invitera l’utilisateur à accorder l’accès aux types de données de santé que l’application utilisera. Ceci, encore une fois, est une bonne expérience utilisateur, car l’utilisateur comprend pourquoi elle est invitée et quels avantages elle obtient en autorisant l’accès.
2. Connexion de l’interface utilisateur
dans le Navigateur de projet, ouvert Main.storyboard. Dans la première scène, sélectionnez le commutateur. dans le Utilitaires volet sur la droite, ouvrez le Inspecteur des connexions et, dans le Événements envoyés section, faire glisser de Valeur modifiée à la Première Voir le contrôleur dans le Plan du document. Dans le menu contextuel qui répertorie les actions du contrôleur de vue, sélectionnez healthIntegrationButtonSwitched:
. Cela garantit le healthIntegrationButtonSwitched:
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, mais cette fois, faites glisser depuis le Retouche à l’intérieur événement au contrôleur First View. Sélectionnez le readAgeButtonPressed:
action dans le menu contextuel.
Clique le Écrire et faites glisser depuis le Retouche à l’intérieur au contrôleur First View, sélectionnez le writeWeightButtonPressed:
méthode dans le menu contextuel.
Nous devons maintenant connecter les prises que nous avons déclarées aux éléments de l’interface utilisateur. presse Contrôle et faites glisser de Première Voir le contrôleur à l’étiquette avec les deux points d’interrogation. Depuis le menu contextuel intitulé Prises électriques, cliquer sur ageLabel
. Cela connectera la prise à 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 activez l’interrupteur. Vous devriez être invité avec l’interface utilisateur des autorisations HealthKit suivante:


Assurez-vous d’activer les deux interrupteurs avant d’appuyer sur 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 d’appuyer sur Lis bouton. Si vous exécutez l’application dans le simulateur iOS, il ne se passera probablement rien, car vous n’avez pas défini de date de naissance. Vous pouvez vous diriger vers l’application Santé dans le simulateur iOS et la configurer.
- Ouvrez l’application Santé.
- Sélectionner Données de santé languette.
- Robinet Moi.
- Robinet Éditer.
- Robinet Date de naissance et fixez une date. Robinet Terminé.
Vous pouvez maintenant revenir à notre application HealthBasics et appuyer sur le Lis bouton à nouveau. Cette fois, votre âge devrait être affiché.
Vous pouvez également tester le partage de poids. Sélectionnez le champ de texte du poids et entrez une valeur en kilogrammes. Après avoir touché Écrire, revenez à 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 de l’utilisation de HealthKit.
- comment demander l’autorisation à l’utilisateur
- comment lire et écrire des données de base
- comment encapsuler le 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 dans HealthKit. Ceci est utile si vous créez une application d’entraînement (course à pied, vélo, marche, etc.). La plupart des éléments de base sont similaires.
Étape 1: extension du 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:completion:
méthode en ajoutant le type d’entraînement au 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 { // In a real world app, you would pass in a model object representing your workout data, and you would pull the relevant data here and pass it to the HealthKit workout method. // For the sake of simplicity of this example, we will just set arbitrary data. NSDate *startDate = [NSDate date]; NSDate *endDate = [startDate dateByAddingTimeInterval:60 * 60 * 2]; NSTimeInterval duration = [endDate timeIntervalSinceDate:startDate]; CGFloat distanceInMeters = 57000.; HKQuantity *distanceQuantity = [HKQuantity quantityWithUnit:[HKUnit meterUnit] doubleValue:(double)distanceInMeters]; HKWorkout *workout = [HKWorkout workoutWithActivityType:HKWorkoutActivityTypeRunning startDate:startDate endDate:endDate duration:duration totalEnergyBurned:nil totalDistance:distanceQuantity metadata:nil]; [self.healthStore saveObject:workout withCompletion:^(BOOL success, NSError *error) { NSLog(@"Saving workout to healthStore - success: %@", success ? @"YES" : @"NO"); if (error != nil) { NSLog(@"error: %@", error); } }]; }
Dans ma propre application, Routie, J’ai utilisé l’approche consistant à transmettre un objet modèle au writeWorkoutDataFromModelObject:
méthode, déléguant le gros du travail à la classe manager. Ce dernier extrait les données requises de l’objet modèle et transmet les informations au HKHealthStore
exemple. Je pense que c’est une bonne approche pour garder le code lié à HealthKit confiné dans la classe manager.
La mise en œuvre du writeWorkoutDataFromModelObject:
La méthode est assez simple. Il n’y a que trois étapes:
- Nous préparons d’abord les données. Dans cet exemple, nous inventons les chiffres.
- Nous créons ensuite un
HKWorkout
objet en invoquant l’un des initialiseurs pratiques de la classe. - Enfin, nous sauvegardons le
HKWorkout
objecter à laHKHealthStore
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 lors de 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 passer en distance totale, en énergie totale brûlée et en métadonnées. Les métadonnées peuvent être utilisées pour attribuer des informations supplémentaires à l’entraînement. Ceci est vraiment 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
Ouvert 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)sender { // In a real world app, you would obtain reference to a relevant model object and pass it to following method. [[GSHealthKitManager sharedManager] requestAuthorization]; [[GSHealthKitManager sharedManager] writeWorkoutDataFromModelObject:nil]; }
Étape 3: Création de l’interface utilisateur de l’entraînement
Nous ajouterons simplement un seul bouton à la deuxième scène de l’application pour écrire l’entraînement. Ouvert Main.storyboard et concentrez-vous sur la deuxième scène. Supprimez les étiquettes qui se trouvent actuellement 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 Écrire un entraînement. Connectez son Retouche à l’intérieur événement à la writeWorkoutButtonPressed:
action que nous avons mise en œuvre à l’étape précédente.
5. Essai
Générez et exécutez l’application, puis définissez le commutateur d’intégration d’intégrité sur activé. le Accès à la santé s’affiche avec le nouveau type d’entraînement demandé désactivé. Allumez-le et appuyez sur Terminé. Ceci est uniquement nécessaire, car nous avons ajouté le type de partage d’entraînement à la liste des types de partage. Cela signifie que nous devons demander l’autorisation à l’utilisateur avant de l’utiliser.


Ouvrez le deuxième onglet en bas et appuyez sur Écrire un entraînement. Si tout s’est bien passé, vous devriez voir le message suivant dans la console de Xcode:
Saving workout to healthStore - success: YES
Vous pouvez maintenant passer à l’application Santé et accéder à Données de santé > Aptitude > Entraînements. Là, vous devriez voir l’entraînement qui vient d’être ajouté.


Conclusion
Dans ce didacticiel, je vous ai montré comment rédiger un entraînement dans HealthKit. Je vous ai également montré comment séparer le code lié à HealthKit en passant un objet modèle à la méthode qui écrit l’entraînement dans HealthKit.
J’espère que vous avez apprécié ce didacticiel et que vous avez appris toutes les bases dont vous avez besoin pour y aller et intégrer votre propre application avec HealthKit. J’espère également vous avoir convaincu d’essayer HealthKit.
Faites-moi savoir dans les commentaires comment vous avez aimé ce tutoriel ou si quelque chose n’était pas clair. Vous pouvez également me trouver sur Twitter.
Liens
La liste ci-dessous comprend un certain nombre de liens pertinents afin que vous puissiez rapidement accéder à ce dont vous avez besoin:
- Pommes Référence du cadre HealthKit: Je recommande fortement de le lire.
- Fit: stocker et récupérer les données HealthKit: exemple d’application HealthKit fourni par Apple
- Directives d’examen de l’App Store – HealthKit: la section dans l’App Store Review Guidelines couvrant HealthKit
- Présentation de HealthKit (Vidéos de la session 2014 de la WWDC)
- Nouveautés de HealthKit (Vidéos de la session WWDC 2015)
Laisser un commentaire