Le cadre HealthKit a été introduit l'année dernière à la WWDC 2014 en tant que lieu unique où les applications peuvent stocker, partager et lire des données relatives à la santé. La nouvelle application Health, qui représente la vue de l'utilisateur sur ces données, était l'une des fonctionnalités phares d'iOS 8..
L'un des principaux avantages de HealthKit est que les applications liées à la condition physique et à la santé peuvent facilement partager des données entre elles. Au cours de l'année écoulée, de nombreux développeurs ont adopté HealthKit dans leurs applications et les utilisateurs férus de technologie s'attendent désormais à ce que toute application de fitness s'intègre à HealthKit..
Il existe de nombreux avantages, pièges et meilleures pratiques lorsque vous utilisez ce nouveau cadre excitant. Récemment, j'ai eu une expérience pratique de la structure HealthKit lorsque j'ai ajouté la prise en charge de HealthKit à l'une de mes applications, Routie. Si vous envisagez d'utiliser HealthKit dans votre propre application, ce tutoriel est pour vous..
J'ai déjà mentionné certains des avantages de HealthKit, mais si vous n'êtes pas encore vendu, laissez-moi simplement dire que ce n'est vraiment pas difficile d'intégrer HealthKit. J'irais même plus loin en disant que c'est plus facile que la plupart des nouveaux frameworks introduits par Apple. Évidemment, cela dépend fortement de ce que vous voulez réaliser avec cela. Mais en général, je dirais que le rapport entre l'effort nécessaire pour intégrer HealthKit et les avantages qu'il apporte à vos utilisateurs est très favorable..
Outre une intégration simple dans les applications existantes, il offre également la possibilité de créer une toute nouvelle catégorie d'applications. Par exemple, vous pouvez extraire diverses données de HealthKit, telles que les séances d'entraînement de l'utilisateur ou la pression artérielle, et les afficher de manière intéressante, laissant le travail difficile de la collecte de ces données à d'autres applications..
Mon objectif avec ce tutoriel est de vous apprendre les bases en créant un exemple d'application. En outre, je vais vous donner un certain nombre de conseils et d’astuces utiles sur la manière dont vous pourriez ou devriez intégrer HealthKit dans vos propres applications. Après avoir lu cet article, vous devez avoir une compréhension de base de HealthKit, prêt à l’utiliser dans vos applications..
La liste suivante comprend un certain nombre de faits de base sur HealthKit que vous devez connaître:
Pour plus d'informations sur le cadre HealthKit, visitez le site Web Référence du cadre HealthKit d'Apple..
Je sais que vous êtes probablement impatient de commencer avec l'exemple de projet maintenant, mais il y a quelques points importants dont vous devez être conscient avant de plonger dans.
Maintenant que nous avons résolu ce problème, commençons par le tutoriel..
Nous allons construire une application simple qui s'intègre à HealthKit et explique certains des concepts de base du cadre. En particulier, nous allons:
Lancez Xcode et sélectionnez Fichier > Nouveau > Projet… Du iOS> Application section, sélectionnez la Application à onglets modèle et cliquez Suivant.
Entrer Bases Santé comme du projet Nom du produit et cliquez Suivant. Sélectionnez l'emplacement où vous souhaitez enregistrer le projet et cliquez sur Créer.
dans le Navigateur de projet à gauche, cliquez sur le projet, sélectionnez le Bases Santé cible et ouvrez le Les capacités onglet en haut. Faites défiler jusqu'à la HealthKit section et activez HealthKit en appuyant sur le commutateur à droite. En coulisse, Xcode fera le nécessaire pour que vous puissiez activer HealthKit.
Pour ce projet, nous n'utiliserons pas de classes de taille. Les classes de taille étant activées par défaut, nous devons les désactiver manuellement dans Xcode. dans le Navigateur de projet à gauche, sélectionnez Tableau principal. Ouvrez le Inspecteur de fichier à droite et décochez la case intitulée Utiliser les classes de taille.
Xcode vous montrera un dialogue d'avertissement. Rejetez-le en cliquant sur Désactiver les classes de taille, mais faire pour garder les données de classe de taille pour iPhone comme indiqué ci-dessous.
Retirez les deux étiquettes du Premier contrôleur de vue. Ensuite, faites glisser une étiquette et un commutateur de la Bibliothèque d'objets à droite sur le contrôleur First View. Remplacez le texte de l'étiquette par Intégration de la santé et réglez l'état du commutateur sur de.
Ajoutez deux autres étiquettes et un bouton au contrôleur First View. Remplacez le texte de la première étiquette par Age de l'utilisateur:, changez le texte de la deuxième étiquette en ??, et alignez-les horizontalement comme indiqué dans la capture d'écran ci-dessous. Enfin, changez le titre du bouton en Lis et placez-le à la droite de la deuxième étiquette. La première scène devrait maintenant ressembler à ceci:
Nous n'avons pas encore fini. Ajoutez une autre étiquette, un champ de texte et un bouton au contrôleur de la première vue, en les alignant horizontalement, comme indiqué ci-dessous. Remplacez le texte de l'étiquette par Poids de l'utilisateur: et changez le titre du bouton en Écrire.
Sélectionnez le champ de texte que vous venez d'ajouter et, dans le champ Inspecteur d'attributs, changer sa Type de clavier à Nombres et ponctuation. C'est tout. La première scène devrait maintenant ressembler à ceci:
Nous allons conserver le code lié à HealthKit dans une classe séparée, la GSHealthKitManager
classe. Créons cette classe maintenant.
dans le Navigateur de projet, clic droit sur le Bases Santé groupe et sélectionnez Nouveau fichier… . Assure-toi Cacao Touch Class est sélectionné dans la liste des modèles et cliquez sur Suivant. Nommez la classe GSHealthKitManager et cliquez Suivant.
Ouvrez le fichier d'en-tête du GSHealthKitManager
class et remplacez le contenu du fichier par le code suivant. Plus tard, nous appellerons ces méthodes à partir du FirstViewController
classe.
#importation@interface GSHealthKitManager: NSObject + (GSHealthKitManager *) sharedManager; - (void) requestAuthorization; - (NSDate *) readBirthDate; - (void) writeWeightSample: (CGFloat) weight; @fin
Ensuite, ouvrez le fichier d’implémentation du GSHealthKitManager
class et remplace son contenu par ce qui suit:
#import "GSHealthKitManager.h" #import@interface GSHealthKitManager () @property (nonatomic, keep) HKHealthStore * healthStore; @end @implementation GSHealthKitManager + (GSHealthKitManager *) sharedManager static dispatch_once_t pred = 0; static GSHealthKitManager * instance = nil; dispatch_once (& pred, ^ instance = [[GSHealthKitManager alloc]] init]; instance.healthStore = [[HKHealthStore alloc] init];); instance de retour; - (void) requestAuthorization if ([HKHealthStore isHealthDataAvailable] == NON) // Si notre appareil ne prend pas en charge HealthKit -> return. revenir; NSArray * readTypes = @ [[HKObjectType characterTypeForIdentifier: HKCharacteristicTypeIdentifierDateOfBirth]]; NSArray * writeTypes = @ [[HKObjectType quantityTypeForIdentifier: HKQuantityTypeIdentifierBodyMass]]; [self.healthStore requestAuthorizationToShareTypes: [NSSet setWithArray: readTypes] readTypes: [NSSet setWithArray: writeTypes] complétion: nil]; - (NSDate *) readBirthDate NSError * error; NSDate * dateOfBirth = [self.healthStore dateOfBirthWithError: & error]; // Méthode pratique de HKHealthStore pour obtenir directement la date de naissance. if (! dateOfBirth) NSLog (@ "Une erreur s'est produite lors de l'extraction des informations sur l'âge de l'utilisateur ou aucune n'a encore été stockée. Dans votre application, essayez de gérer cela avec élégance."); retour dateOfBirth; - (void) writeWeightSample: (CGFloat) weight // Chaque quantité est composée d'une valeur et d'une unité. HKUnit * kilogramUnit = [HKUnit gramUnitWithMetricPrefix: HKMetricPrefixKilo]; HKQuantity * weightQuantity = [Quantité de HKQuantity WithUn: kilogramUnit doubleValue: weight]; HKQuantityType * weightType = [HKQuantityType quantityTypeForIdentifier: HKQuantityTypeIdentifierBodyMass]; NSDate * now = [NSDate date]; // Pour chaque échantillon, nous avons besoin d'un type d'échantillon, d'une quantité et d'une date. HKQuantitySample * weightSample = [HKQuantitySample quantitéSampleWithType: weightType quantité: weightQuantity startDate: now EndDate: now]; [self.healthStore saveObject: weightSample withCompletion: ^ (succès BOOL, erreur NSError *) if (! success) NSLog (@ "Erreur lors de la réduction du poids (% f) dans Health Store:% @.", poids, erreur) ; ]; @fin
Bien que la plupart du code lié à HealthKit soit assez facile à comprendre, examinons chaque méthode pour vous assurer que nous sommes sur la même page..
sharedManager
est une méthode de classe qui crée l'objet singleton lors de son premier appel et renvoie cette instance chaque fois que la méthode est appelée. le dispatch_once
fonction est une fonction GCD (Grand Central Dispatch) qui garantit que le bloc qui lui est transmis ne soit appelé qu'une seule fois, même si sharedManager
la méthode serait appelée à partir de plusieurs threads en même temps.demandeAutorisation
est une méthode qui demande au magasin HealthKit des autorisations pour lire et / ou écrire les données spécifiques dont nous avons besoin. Vous devez appeler cette méthode avant d’utiliser l’une des API d’écriture / lecture du HKHealthStore
classe. Dans le cas où l'utilisateur refuse certaines (ou toutes les autorisations), HealthKit ne vous en informera pas. Le fait que l'utilisateur ne souhaite pas partager certains types de données est une information en soi. Voilà à quel point Apple se soucie de la confidentialité.readBirthDate
La méthode retourne la date de naissance de l'utilisateur. Il retourne néant
s'il y a eu une erreur ou si l'utilisateur n'a pas entré de date de naissance.writeWeightSample:
enregistre une mesure de poids dans HealthKit. J'ai commenté le code afin que vous ayez une idée générale de ce qui se passe dans la méthode. Une fois que nous avons le HKQuantitySample
objet, nous le sauvons à la HKHealthStore
exemple, en utilisant ses saveObject: withCompletion:
méthode. Cette méthode est utilisée pour chaque type de données de santé et nous l'utilisons également dans la deuxième partie de ce tutoriel lors de la sauvegarde des séances d'entraînement..Dans cette étape, vous avez rencontré un certain nombre de classes HealthKit. Vous pouvez en savoir plus sur chaque classe dans la référence du framework HealthKit, mais je vais vous donner un bref résumé de chaque classe..
HKHealthStore
Ceci est votre fenêtre pour les données HealthKit. Apple recommande d’utiliser une seule instance de cette classe dans votre application, ce qui se prête très bien au motif singleton. Vous l'utilisez pour demander des autorisations à l'utilisateur, enregistrer des échantillons et / ou des séances d'entraînement sur HealthKit et interroger les données stockées. Ce ne sont là que quelques-unes des tâches du HKHealthStore
classe.HKUnit
Les instances de cette classe peuvent représenter des unités de base, telles que des mètres, des secondes et des grammes, ou des unités complexes créées en combinant des unités de base, telles que des km / h ou des g / m³. Des unités complexes peuvent être facilement créées à partir de chaînes.HKQuantity
Les instances de cette classe stockent une valeur (représentée par double) pour une unité donnée (représentée par HKUnit
). Vous pouvez utiliser le doubleValueForUnit:
Méthode pour convertir la valeur de la quantité en unité qui a été passée. Un exemple d'une telle conversion consisterait à créer une quantité de distance avec une unité de mètres et à demander sa valeur en pieds.HKQuantityType
HealthKit utilise des types de quantité pour créer des échantillons qui stockent une valeur numérique. Il est recommandé d'utiliser quantitéTypeForIdentifiant:
lors de la création de types de quantité. Quelques exemples de quantités sont la distance parcourue, l’énergie brûlée, les marches et les vols montés.HKQuantitySample
Une instance de cette classe représente un échantillon ayant un type de quantité (représenté par HKQuantityType
), une quantité (représentée par HKQuantity
) et une date de début et de fin. Si l'échantillon ne couvre pas une période donnée, la date de fin peut être identique à la date de début..Nous pouvons maintenant utiliser le GSHealthKitManager
Singleton de n'importe où dans notre application pour travailler avec HealthKit.
Dans ce tutoriel, vous avez découvert les bases du framework HealthKit. Je vous ai présenté le cadre et souligné certaines des mises en garde à surveiller. Nous avons également construit la base de l'exemple d'application et mis en œuvre le GSHealthKitManager
classe, que nous utiliserons pour interagir avec HealthKit.
Dans la deuxième partie de cette série, nous allons continuer à créer l'exemple d'application et à intégrer davantage HealthKit. Vous pouvez trouver les fichiers source de ce tutoriel sur GitHub.