Im ersten Teil dieses Tutorials habe ich Sie mit dem HealthKit-Framework vertraut gemacht. Aufgrund meiner eigenen Erfahrung bei der Integration von HealthKit in eine meiner Apps habe ich einige wichtige Punkte hervorgehoben. Wir haben auch begonnen, an unserer Beispiel-App zu arbeiten, HealthBasics, Hier werden die grundlegenden Konzepte der Arbeit mit HealthKit erläutert.
Im ersten Teil haben wir das implementiert GSHealthKitManager
Klasse, mit der wir mit HealthKit interagieren. Lass uns jetzt die GSHealthKitManager
Klasse, um die Funktionalität des ersten View-Controllers der Beispiel-App zu implementieren.
In dem Projektnavigator, öffnen FirstViewController.m und ersetzen Sie den Inhalt durch Folgendes:
#import "FirstViewController.h" #import "GSHealthKitManager.h" @interface FirstViewController () @property (nicht atomar, schwach) IBOutlet UILabel * ageLabel; @ property (nichtatomisch, schwach) IBOutlet UITextField * weightTextField; @end @implementation FirstViewController - (IBAction) healthIntegrationButtonSwitched: (UISwitch *) Sender if (sender.isOn) [[[GSHealthKitManager sharedManager] requestAuthorization]; else // Deaktivieren Sie möglicherweise die HealthKit-Funktion in Ihrer App. - (IBAction) readAgeButtonPressed: (id) Sender NSDate * birthDate = [[GSHealthKitManager sharedManager] readBirthDate]; if (birthDate == nil) // Entweder hat der Benutzer das Datum nicht eingestellt oder es ist ein Fehler aufgetreten. Einfach zurückkehren. Rückkehr; NSDateComponents * ageComponents = [[NSCalendar currentCalendar] -Komponenten: NSCalendarUnitYear von Date: birthDate bisDate: [NSDate date] Optionen: 0]; self.ageLabel.text = [@ (ageComponents.year) stringValue]; - (IBAction) writeWeightButtonPressed: (id) Sender [[[GSHealthKitManager sharedManager] writeWeightSample: self.weightTextField.text.floatValue]; @Ende
Wenn Sie Erfahrung in der iOS-Entwicklung haben, sollte die Implementierung nicht schwer zu verstehen sein. In der ersten Ansichtssteuerung reagieren wir darauf, dass der Benutzer den Schalter umschaltet und auf eine der Schaltflächen tippt. Jede dieser Interaktionen löst eine Methode der GSHealthKitManager
Klasse.
Es gibt einen Grund, warum ich mich für einen Switch entschieden habe, um den Benutzer um Erlaubnis zu bitten, auf seine HealthKit-Daten zuzugreifen. Wenn Sie die Implementierung verstanden haben, werden Sie verstehen, dass es sich um eine viel bessere Lösung handelt.
Für den Benutzer ist es leicht zu verstehen, dass sich die App bei eingeschaltetem Switch in HealthKit integriert. Wenn es aus ist, tut es nicht. Wenn Sie diesen Schalter zum ersten Mal einschalten, wird der Benutzer dazu aufgefordert, Zugriff auf die von der App verwendeten Integritätsdatentypen zu gewähren. Dies ist wiederum eine gute Benutzererfahrung, da der Benutzer versteht, warum er dazu aufgefordert wird und welche Vorteile er dadurch hat, dass er den Zugriff gewährt.
In dem Projektnavigator, öffnen Hauptplatine. Wählen Sie in der ersten Szene den Schalter. In dem Dienstprogramme Fenster rechts öffnen Sie die Verbindungsinspektor und in der Gesendete Ereignisse Abschnitt ziehen aus Wert geändert zum Zuerst Controller anzeigen in dem Dokument Gliederung. Wählen Sie im Popup-Menü mit den Aktionen des View-Controllers die Option aus healthIntegrationButtonSwitched:
. Dies gewährleistet die healthIntegrationButtonSwitched:
Die Methode wird aufgerufen, wenn der Switch umgeschaltet wird.
Die Schritte zum Verbinden der Lesen und Schreiben Knöpfe sind fast identisch. Drücke den Lesen Taste, nur dieses Mal ziehen Sie aus der Touch Up Inside Ereignis an den First View Controller. Wähle aus readAgeButtonPressed:
Aktion aus dem Einblendmenü.
Drücke den Schreiben Taste und ziehen Sie aus dem Touch Up Inside Ereignis an den First View Controller, wählen Sie die Option writeWeightButtonPressed:
Methode aus dem Einblendmenü.
Nun müssen wir die von uns deklarierten Ausgänge mit den Elementen der Benutzeroberfläche verbinden. Drücken Sie Steuerung und ziehen aus Zuerst Controller anzeigen auf dem Etikett mit den beiden Fragezeichen. Aus dem Popup-Menü mit dem Titel Outlets, klicke auf ageLabel
. Dadurch wird die Steckdose mit dem Etikett verbunden.
Wiederholen Sie diese Schritte für das Textfeld und verbinden Sie es mit dem weightTextField
Auslass des View-Controllers.
Die erste Szene sollte jetzt voll funktionsfähig sein. Starten Sie die App und schalten Sie den Schalter ein. Sie sollten mit der folgenden Benutzeroberfläche für HealthKit-Berechtigungen aufgefordert werden:
Stellen Sie sicher, dass Sie beide Schalter einschalten, bevor Sie auf tippen Erledigt, Andernfalls hat Ihre App keinen Zugriff auf die Daten, die wir in der Beispiel-App benötigen.
Sie können jetzt versuchen, auf zu tippen Lesen Taste. Wenn Sie die App im iOS-Simulator ausführen, wird wahrscheinlich nichts passieren, da Sie kein Geburtsdatum festgelegt haben. Sie können im iOS-Simulator zur Health-App wechseln und diese festlegen.
Sie können jetzt zu unserer HealthBasics-App zurückkehren und auf die Schaltfläche tippen Lesen Taste erneut. Dieses Mal sollte Ihr Alter angezeigt werden.
Sie können auch die Gewichtsverteilung testen. Wählen Sie das Gewichtstextfeld aus und geben Sie einen Wert in Kilogramm ein. Nachdem Sie auf tippen Schreiben, zurück zur Health App und in der Gesundheitsdaten Registerkarte auswählen Körpermaße und Gewicht. Die soeben hinzugefügte Probe sollte sichtbar sein.
Bisher haben Sie die Grundlagen der Arbeit mit HealthKit gelernt.
Im zweiten Teil unserer Beispiel-App zeige ich Ihnen, wie Sie ein Training für HealthKit schreiben. Dies ist nützlich, wenn Sie eine Trainings-App (Laufen, Radfahren, Gehen usw.) erstellen. Die meisten Bausteine sind ähnlich.
GSHealthKitManager
KlasseWir beginnen mit der Erweiterung der GSHealthKitManager
Klasse. Fügen Sie die folgende Methodendeklaration zu hinzu GSHealthKitManager.h:
- (void) writeWorkoutDataFromModelObject: (id) workoutModelObject;
Fügen Sie einen neuen Freigabetyp hinzu requestAuthorizationToShareTypes: readTypes: Fertigstellung:
Methode durch Hinzufügen des Trainingstyps zum writeTypes
Array.
NSArray * writeTypes = @ [[HKObjectType QuantityTypeForIdentifier: HKQuantityTypeIdentifierBodyMass], [HKObjectType WorkoutType]];
Zum Schluss fügen Sie die writeWorkoutDataFromModelObject:
Methode am unteren Rand des GSHealthKitManager
Klasse.
- (void) writeWorkoutDataFromModelObject: (id) workoutModelObject // In einer realen App würden Sie ein Modellobjekt übergeben, das Ihre Trainingsdaten darstellt, und die relevanten Daten hierher ziehen und an die HealthKit-Trainingsmethode übergeben. // Der Einfachheit halber werden wir nur beliebige Daten setzen. NSDate * startDate = [NSDate-Datum]; 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 Metadaten: nil]; [self.healthStore saveObject: Workout withCompletion: ^ (BOOL-Erfolg, NSError * -Fehler) NSLog (@ "Speichern des Workouts im healthStore - Erfolg:% @", Erfolg? @ "YES": @ "NO"); if (Fehler! = Null) NSLog (@ "Fehler:% @", Fehler); ];
In meiner eigenen App, Routie, habe ich den Ansatz verwendet, ein Modellobjekt an das zu übergeben writeWorkoutDataFromModelObject:
Methode, die das schwere Heben an die Manager-Klasse delegiert. Dieser holt die erforderlichen Daten aus dem Modellobjekt und gibt die Informationen an das Objekt weiter HKHealthStore
Beispiel. Ich glaube, es ist ein guter Ansatz, um den HealthKit-bezogenen Code in der Manager-Klasse zu halten.
Die Umsetzung der writeWorkoutDataFromModelObject:
Methode ist ziemlich einfach. Es gibt nur drei Schritte:
HKWorkout
object durch Aufrufen eines der praktischen Initialisierer der Klasse.HKWorkout
Einwände gegen die HKHealthStore
Beispiel.Dies ist das erste Mal, dass wir mit der HKWorkout-Klasse gearbeitet haben. Lassen Sie mich diese Klasse kurz vorstellen. Das HealthKit-Framework verwendet die HKWorkout
Klasse, um Aktivitäten zu verfolgen. Workouts sind meist unveränderlich, daher müssen Sie während der Initialisierung die Werte des Workouts angeben.
Beim Initialisieren eines Trainings müssen Sie eine Aktivitätsart, ein Startdatum und ein Enddatum angeben. Sie können optional die Gesamtdistanz, die gesamte verbrannte Energie und die Metadaten übergeben. Die Metadaten können verwendet werden, um dem Training zusätzliche Informationen zuzuordnen. Dies ist sehr nützlich, wenn Sie weitere Informationen zu einem Training mit einer anderen Anwendung teilen möchten, die Sie ebenfalls erstellt haben.
writeWorkoutButtonPressed:
AktionÖffnen SecondViewController.m und fügen Sie den folgenden Import oben in die Datei ein:
#import "GSHealthKitManager.h"
Als nächstes implementieren Sie die writeWorkoutButtonPressed:
Methode wie unten gezeigt.
- (IBAction) writeWorkoutButtonPressed: (id) sender // In einer realen App würden Sie einen Verweis auf ein relevantes Modellobjekt erhalten und an folgende Methode übergeben. [[GSHealthKitManager sharedManager] requestAuthorization]; [[GSHealthKitManager sharedManager] writeWorkoutDataFromModelObject: nil];
Wir werden der zweiten Szene der App nur eine Schaltfläche hinzufügen, um das Training zu schreiben. Öffnen Hauptplatine und konzentrieren Sie sich auf die zweite Szene. Löschen Sie die Beschriftungen, die sich aktuell im Second View Controller befinden.
Fügen Sie in der Mitte der Ansicht des Controller-Controllers eine Schaltfläche hinzu und setzen Sie den Titel auf Schreibe Workout. Verbinden Sie seine Touch Up Inside Veranstaltung zum writeWorkoutButtonPressed:
Aktion, die wir im vorherigen Schritt umgesetzt haben.
Erstellen Sie die Anwendung, führen Sie sie aus, und aktivieren Sie den Integrationsschalter für die Integrität. Das Gesundheitszugang Der Bildschirm wird mit der neu angeforderten Trainingsart angezeigt. Schalten Sie es ein und tippen Sie auf Erledigt. Dies ist nur erforderlich, weil wir den Freigabetyp für das Training zur Liste der Freigabetypen hinzugefügt haben. Dies bedeutet, dass wir den Benutzer um Erlaubnis bitten müssen, bevor wir ihn verwenden.
Öffnen Sie die zweite Registerkarte unten und tippen Sie auf Schreibe Workout. Wenn alles gut lief, sollte die folgende Meldung in der Xcode-Konsole angezeigt werden:
Workout für healthStore speichern - Erfolg: JA
Jetzt können Sie zur Gesundheits-App wechseln und zu gehen Gesundheitsdaten > Fitness > Workouts. Dort sollte das gerade hinzugefügte Training angezeigt werden.
In diesem Tutorial habe ich Ihnen gezeigt, wie Sie ein Training an HealthKit schreiben können. Ich habe Ihnen außerdem gezeigt, wie Sie mit HealthKit zusammenhängenden Code trennen, indem Sie ein Modellobjekt an die Methode übergeben, die das Training in HealthKit schreibt.
Ich hoffe, Ihnen hat dieses Tutorial gefallen und Sie haben alle Grundlagen gelernt, die Sie benötigen, um Ihre eigene App mit HealthKit zu integrieren. Ich hoffe auch, dass ich Sie überzeugt habe, HealthKit auszuprobieren.
Lassen Sie mich in den Kommentaren wissen, wie Ihnen dieses Tutorial gefallen hat oder ob etwas unklar war. Sie können mich auch auf Twitter finden.
Die folgende Liste enthält eine Reihe relevanter Links, sodass Sie schnell zu dem gelangen können, was Sie benötigen: