Erste Schritte mit HealthKit Teil 1

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.

Warum sollte ich mich für HealthKit interessieren??

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.

Was wirst du lernen?

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.

Was du wissen solltest

Die folgende Liste enthält einige grundlegende Fakten zu HealthKit, die Sie kennen sollten:

  • Das HealthKit-Framework ist seit iOS 8 verfügbar. Beachten Sie, dass es nur auf dem iPhone und nicht auf dem iPad verfügbar ist.
  • Apple legt großen Wert auf den Datenschutz. Aus diesem Grund müssen Sie für jeden Datentyp, auf den Sie zugreifen möchten, explizit den Zugriff zum Lesen und / oder Schreiben auf HealthKit anfordern. Der Benutzer hat die Möglichkeit, den Zugriff für einige Typen zuzulassen und für andere zu verweigern.
  • Das HealthKit-Framework nutzt stark die Unterklassen.
  • Es gibt zwei Hauptdatentypen, Eigenschaften und Proben. Merkmale wie Geburtsdatum oder Blutgruppe des Benutzers ändern sich normalerweise nicht. Muster repräsentieren Daten zu einem bestimmten Zeitpunkt.
  • Menge proben sind die häufigsten Datentypen. Dazu gehören die Größe und das Gewicht des Benutzers, die durchgeführten Schritte, die Temperatur des Benutzers, die Pulsfrequenz usw.
  • Workouts, die zu den Stichproben gehören, sind speziell für die Darstellung von Läufen, Spaziergängen, Fahrten usw.

Weitere Informationen zum HealthKit-Framework finden Sie in der HealthKit Framework-Referenz von Apple.

Bevor wir loslegen

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.

  • Der HealthKit-Store wird verschlüsselt, wenn das Telefon des Benutzers gesperrt ist. Dies bedeutet, dass Sie nicht lesen können, wenn sich Ihre App im Hintergrund befindet. Das Schreiben in HealthKit funktioniert jedoch auch, wenn das Telefon gesperrt ist.
  • Sie müssen in Ihrer App Store-Beschreibung und in Ihrer App erläutern, wie Ihre App die von HealthKit erhaltenen Daten verwendet. Andernfalls kann Ihre App abgelehnt werden.
  • Es gibt einen neuen Abschnitt in den App Store-Überprüfungsrichtlinien, der HealthKit behandelt. Sie sollten es unbedingt lesen, bevor Sie entscheiden, ob Sie HealthKit unterstützen möchten oder nicht.
  • Sobald Ihre App in HealthKit integriert ist, müssen Sie eine Datenschutzrichtlinie dafür angeben. Apple empfiehlt sogar einige Dokumente, in denen festgelegt ist, wie die Datenschutzrichtlinien für die Gesundheit aussehen sollen. Es ist wichtig, dass die Datenschutzrichtlinie dem Benutzer mitteilt, wie Ihre App die Daten behandelt.

Nun, da wir das aus dem Weg geräumt haben, beginnen wir mit dem Tutorial.

Das Projekt

Wir werden eine einfache App erstellen, die in HealthKit integriert ist und einige grundlegende Konzepte des Frameworks erläutert. Insbesondere werden wir:

  • Erstellen Sie ein neues Projekt und aktivieren Sie HealthKit
  • den Benutzer um Erlaubnis bitten, auf seine gesundheitsbezogenen Daten zuzugreifen
  • Lesen Sie das Geburtsdatum des Benutzers
  • Schreiben Sie eine Gewichtsprobe an HealthKit
  • Schreiben Sie ein Training an HealthKit

1. Einrichten des Projekts

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.

2. Aktivieren von HealthKit

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.


3. Erstellen der Benutzeroberfläche

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:

4. Erstellen des HealthKit Managers

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.
  • Das 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.

Fazit

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.