Das HealthKit-Framework wurde im vergangenen Jahr auf der WWDC 2014 als einziger Ort eingeführt, an dem Apps gesundheitsbezogene Daten speichern, gemeinsam nutzen und lesen können. Die neue Health-App, die der Benutzer in diese Daten einblickt, war eines der Hauptmerkmale von iOS 8.
Einer der Hauptvorteile von HealthKit ist, dass Fitness- und gesundheitsbezogene Apps Daten problemlos miteinander austauschen können. Im vergangenen Jahr haben viele Entwickler HealthKit in ihre Apps übernommen, und technisch versierte Benutzer erwarten, dass jede Fitness-App in HealthKit integriert werden kann.
Bei der Arbeit mit diesem neuen und aufregenden Rahmen gibt es viele Vorteile, Vorgehensweisen und bewährte Vorgehensweisen. Kürzlich habe ich aus erster Hand mit dem HealthKit-Framework gearbeitet, als ich einer meiner Apps, Routie, Unterstützung für HealthKit hinzufüge. Wenn Sie HealthKit in Ihrer eigenen App verwenden möchten, ist dieses Tutorial genau das Richtige für Sie.
Ich habe bereits einige der Vorteile von HealthKit erwähnt, aber wenn Sie noch nicht verkauft sind, lassen Sie mich einfach sagen, dass es wirklich nicht so schwer ist, HealthKit zu integrieren. Ich würde sogar noch weiter gehen und sagen, dass es einfacher ist als die meisten anderen neuen Frameworks, die Apple eingeführt hat. Das hängt natürlich stark davon ab, was Sie damit erreichen wollen. Im Allgemeinen würde ich sagen, dass das Verhältnis zwischen dem Aufwand für die Integration von HealthKit und den Vorteilen für Ihre Benutzer sehr günstig ist.
Neben der unkomplizierten Integration in bestehende Apps bietet dies auch die Möglichkeit, eine völlig neue Kategorie von Apps zu erstellen. Sie können zum Beispiel verschiedene Daten aus HealthKit abrufen, wie z. B. die Workouts des Benutzers oder den Blutdruck, und diese auf interessante Weise anzeigen, sodass die harte Arbeit des Sammelns dieser Daten anderen Apps überlassen bleibt.
Mit diesem Tutorial möchte ich Ihnen die Grundlagen vermitteln, indem Sie eine Beispiel-App erstellen. Darüber hinaus gebe ich Ihnen einige nützliche Tipps und Tricks, wie Sie HealthKit in Ihre eigenen Apps integrieren können oder sollen. Nachdem Sie diesen Artikel gelesen haben, sollten Sie über ein grundlegendes Verständnis von HealthKit verfügen, damit Sie es in Ihren Apps verwenden können.
Die folgende Liste enthält einige grundlegende Fakten zu HealthKit, die Sie kennen sollten:
Weitere Informationen zum HealthKit-Framework finden Sie in der HealthKit Framework-Referenz von Apple.
Ich weiß, dass Sie wahrscheinlich schon jetzt mit dem Beispielprojekt beginnen möchten, aber es gibt ein paar wichtige Dinge, die Sie beachten sollten, bevor Sie eintauchen.
Nun, da wir das aus dem Weg geräumt haben, beginnen wir mit dem Tutorial.
Wir werden eine einfache App erstellen, die in HealthKit integriert ist und einige grundlegende Konzepte des Frameworks erläutert. Insbesondere werden wir:
Starten Sie Xcode und wählen Sie Datei > Neu > Projekt… Von dem iOS> Anwendung Wählen Sie den Abschnitt aus Tabbed-Anwendung Vorlage und klicken Sie auf Nächster.
Eingeben HealthBasics wie das Projekt Produktname und klicken Sie auf Nächster. Wählen Sie den Ort aus, an dem Sie das Projekt speichern möchten, und klicken Sie auf Erstellen.
In dem Projektnavigator Klicken Sie links auf das Projekt, wählen Sie das aus HealthBasics Ziel und öffnen Sie die Fähigkeiten Tab oben. Scrollen Sie nach unten zu HealthKit und aktivieren Sie HealthKit, um den Schalter auf der rechten Seite umzuschalten. Hinter den Kulissen erledigt Xcode alles, um HealthKit zu aktivieren.
Für dieses Projekt werden keine Größenklassen verwendet. Da Größenklassen standardmäßig aktiviert sind, müssen Sie sie in Xcode manuell deaktivieren. In dem Projektnavigator Wählen Sie links aus Hauptplatine. Öffne das Dateiinspektor auf der rechten Seite und deaktivieren Sie das Kontrollkästchen Verwenden Sie Größenklassen.
Xcode zeigt einen Warndialog an. Schließen Sie es ab, indem Sie auf klicken Größenklassen deaktivieren, aber machen, um Größenklassen-Daten für iPhone Wie nachfolgend dargestellt.
Entfernen Sie die beiden Etiketten in der Erste Ansicht Controller. Ziehen Sie als Nächstes ein Etikett und einen Schalter aus der Objektbibliothek rechts auf den First View Controller. Ändern Sie den Text der Beschriftung in Gesundheitsintegration und setzen Sie den Status des Schalters auf aus.
Fügen Sie dem First View Controller zwei weitere Beschriftungen und eine Schaltfläche hinzu. Ändern Sie den Text der ersten Beschriftung in Alter des Benutzers:, ändern Sie den Text des zweiten Labels in ??, und richten Sie sie horizontal aus, wie in der Abbildung unten gezeigt. Ändern Sie schließlich den Titel der Schaltfläche in Lesen und positionieren Sie es rechts vom zweiten Etikett. Die erste Szene sollte jetzt so aussehen:
Wir sind noch nicht fertig. Fügen Sie dem First View Controller eine weitere Beschriftung, ein Textfeld und eine Schaltfläche hinzu, und richten Sie sie wie unten gezeigt horizontal aus. Ändern Sie den Text der Beschriftung in Benutzergewicht: und ändern Sie den Titel der Schaltfläche in Schreiben.
Wählen Sie das soeben hinzugefügte Textfeld und in der Attribute-Inspektor, ändern Sie seine Tastaturtyp zu Zahlen und Interpunktion. Das ist es. Die erste Szene sollte jetzt so aussehen:
Wir werden HealthKit-Code in einer separaten Klasse, der GSHealthKitManager
Klasse. Lass uns diese Klasse jetzt erstellen.
In dem Projektnavigator, Klicken Sie mit der rechten Maustaste auf HealthBasics gruppieren und auswählen Neue Datei… . Stelle sicher Kakao-Touch-Klasse wird aus der Liste der Vorlagen ausgewählt und klicken Sie auf Nächster. Benennen Sie die Klasse GSHealthKitManager und klicken Sie auf Nächster.
Öffnen Sie die Headerdatei des GSHealthKitManager
klassifizieren und den Inhalt der Datei durch folgenden Code ersetzen. Wir werden diese Methoden später von der FirstViewController
Klasse.
#einführen@ Schnittstelle GSHealthKitManager: NSObject + (GSHealthKitManager *) sharedManager; - (nichtig) requestAuthorization; - (NSDate *) readBirthDate; - (void) writeWeightSample: (CGFloat) Gewicht; @Ende
Als nächstes öffnen Sie die Implementierungsdatei von GSHealthKitManager
klassifizieren und den Inhalt durch Folgendes ersetzen:
#import "GSHealthKitManager.h" #import@interface GSHealthKitManager () @property (nichtatomisch, beibehalten) HKHealthStore * healthStore; @end @implementation GSHealthKitManager + (GSHealthKitManager *) sharedManager statische dispatch_once_t pred = 0; statisch GSHealthKitManager * instance = nil; dispatch_once (& pred, ^ instance = [[GSHealthKitManager-Zuordnung] init]; instance.healthStore = [[HKHealthStore-Zuordnung] init];); Instanz zurückgeben; - (void) requestAuthorization if ([HKHealthStore isHealthDataAvailable] == NO) // Wenn unser Gerät HealthKit -> return nicht unterstützt. Rückkehr; NSArray * readTypes = @ [[HKObjectType charakteristischerTypFüridentifizierer: HKCharacteristicTypeIdentifierDateOfBirth]]; NSArray * writeTypes = @ [[HKObjectType QuantityTypeForIdentifier: HKQuantityTypeIdentifierBodyMass]]; [self.healthStore requestAuthorizationToShareTypes: [NSSet setWithArray: readTypes] readTypes: [NSSet setWithArray: writeTypes] Completion: nil]; - (NSDate *) readBirthDate NSError * error; NSDate * dateOfBirth = [self.healthStore dateOfBirthWithError: & error]; // Bequemlichkeitsmethode von HKHealthStore, um das Geburtsdatum direkt abzurufen. if (! dateOfBirth) NSLog (@ "Entweder ist ein Fehler beim Abrufen der Informationen zum Alter des Benutzers aufgetreten oder es wurden noch keine Daten gespeichert. Versuchen Sie in Ihrer App, dies gebührend zu behandeln."); return dateOfBirth; - (void) writeWeightSample: (CGFloat) weight // Jede Größe besteht aus einem Wert und einer Einheit. HKUnit * kilogramUnit = [HKUnit gramUnitWithMetricPrefix: HKMetricPrefixKilo]; HKQuantity * weightQuantity = [HKQuantity QuantityWithUnit: KilogrammUnit doubleValue: weight]; HKQuantityType * weightType = [HKQuantityType QuantityTypeForIdentifier: HKQuantityTypeIdentifierBodyMass]; NSDate * jetzt = [NSDate-Datum]; // Für jede Probe benötigen wir einen Probentyp, eine Menge und ein Datum. HKQuantitySample * weightSample = [HKQuantitySample QuantitySampleWithType: weightType Quantity: weightQuantity startDate: now endDate: now]; [self.healthStore saveObject: weightSample withCompletion: ^ (BOOL-Erfolg, Fehler NSError *) if (! success) NSLog (@ "Fehler beim Speichern von Gewicht (% f) im Health Store:% @.", Gewicht, Fehler) ; ]; @Ende
Während der größte Teil des HealthKit-Codes leicht verständlich ist, gehen wir die einzelnen Methoden durch, um sicherzustellen, dass wir uns auf derselben Seite befinden.
sharedManager
ist eine Klassenmethode, die das Singleton-Objekt beim ersten Aufruf erstellt und diese Instanz jedes Mal zurückgibt, wenn die Methode aufgerufen wird. Das dispatch_once
Funktion ist eine GCD - Funktion (Grand Central Dispatch), die gewährleistet, dass der an ihn übergebene Block nur einmal aufgerufen wird, auch wenn der sharedManager
Methode würde von mehreren Threads gleichzeitig aufgerufen.requestAuthorization
ist eine Methode, die den HealthKit-Speicher nach Berechtigungen zum Lesen und / oder Schreiben der spezifischen Daten fragt, die wir benötigen. Sie müssen diese Methode aufrufen, bevor Sie eine der Schreib- / Lese-APIs von verwenden HKHealthStore
Klasse. Falls der Benutzer einige (oder alle) Berechtigungen ablehnt, informiert Sie HealthKit nicht darüber. Die Tatsache, dass der Benutzer einige Datentypen nicht freigeben möchte, ist Information an sich. So sehr legt Apple Wert auf Privatsphäre.readBirthDate
Diese Methode gibt das Geburtsdatum des Benutzers zurück. Es kehrt zurück Null
wenn ein Fehler aufgetreten ist oder der Benutzer kein Geburtsdatum eingegeben hat.writeWeightSample:
speichert eine Gewichtsmessung für HealthKit. Ich habe den Code kommentiert, sodass Sie eine allgemeine Vorstellung davon haben sollten, was in der Methode vor sich geht. Sobald wir die haben HKQuantitySample
Objekt speichern wir es in der HKHealthStore
zum Beispiel mit seiner saveObject: withCompletion:
Methode. Diese Methode wird für jede Art von Gesundheitsdaten verwendet. Wir werden sie auch im zweiten Teil dieses Lernprogramms verwenden, wenn Sie Workouts speichern.In diesem Schritt haben Sie eine Reihe von HealthKit-Klassen gefunden. Weitere Informationen zu jeder Klasse finden Sie in der HealthKit Framework Reference. Ich gebe Ihnen jedoch eine kurze Zusammenfassung der einzelnen Klassen.
HKHealthStore
Dies ist Ihr Fenster zu HealthKit-Daten. Apple empfiehlt, in Ihrer App nur eine Instanz dieser Klasse zu verwenden, die sich sehr gut für das Singleton-Muster eignet. Sie verwenden es, um den Benutzer nach Berechtigungen zu fragen, um Proben und / oder Workouts in HealthKit zu speichern und die gespeicherten Daten abzufragen. Dies sind nur einige der Aufgaben der HKHealthStore
Klasse.HKUnit
Instanzen dieser Klasse können entweder Grundeinheiten wie Meter, Sekunden und Gramm oder komplexe Einheiten darstellen, die durch Kombination von Basiseinheiten wie km / h oder oder g / m³ erstellt werden. Komplexe Einheiten können bequem aus Strings erstellt werden.HKQuantity
Instanzen dieser Klasse speichern einen Wert (dargestellt durch double) für eine gegebene Einheit (dargestellt durch HKUnit
). Du kannst den ... benutzen doubleValueForUnit:
Eine Methode, um den Wert der Menge in die übergebene Einheit umzuwandeln. Ein Beispiel für eine solche Umrechnung wäre das Erstellen einer Abstandsmenge mit der Einheit Meter und die Abfrage nach dem Wert in Fuß.HKQuantityType
HealthKit verwendet Quantitätstypen, um Beispiele zu erstellen, in denen ein numerischer Wert gespeichert wird. Es wird empfohlen zu verwenden QuantityTypeForIdentifier:
beim Anlegen von Mengenarten. Ein paar Beispiele für Quantitätstypen sind Fahrradentfernung, Energieverbrauch, Stufen und Flüge.HKQuantitySample
Eine Instanz dieser Klasse stellt eine Probe dar, die einen Quantitätstyp hat (dargestellt durch HKQuantityType
), eine Menge (dargestellt durch HKQuantity
) und ein Start- und Enddatum. Falls sich die Probe nicht über einen bestimmten Zeitraum erstreckt, kann das Enddatum mit dem Startdatum identisch sein.Wir können jetzt die verwenden GSHealthKitManager
singleton von überall in unserer Anwendung, um mit HealthKit zu arbeiten.
In diesem Lernprogramm haben Sie die Grundlagen des HealthKit-Frameworks kennen gelernt. Ich habe Sie mit dem Rahmen vertraut gemacht und auf einige Vorbehalte hingewiesen, auf die Sie achten sollten. Wir haben auch das Fundament der Beispiel-App aufgebaut und die GSHealthKitManager
Klasse, mit der wir mit HealthKit interagieren.
Im zweiten Teil dieser Serie werden wir die Beispiel-App weiterentwickeln und HealthKit weiter integrieren. Sie finden die Quelldateien für dieses Tutorial auf GitHub.