I den første delen av denne opplæringen introduserte jeg deg til HealthKit-rammen. Basert på min egen erfaring med å integrere HealthKit i en av mine apper, har jeg påpekt noen få ting som er viktige å huske på. Vi har også begynt å jobbe med vår prøveapp, HealthBasics, som vil forklare de grunnleggende konseptene for å jobbe med HealthKit.
I første del implementerte vi GSHealthKitManager
klassen, som vi skal bruke til å samhandle med HealthKit. La oss nå bruke GSHealthKitManager
klassen for å implementere funksjonaliteten til den første visningskontrolleren til prøveappen.
I Prosjektnavigator, åpen FirstViewController.m og erstatt innholdet med følgende:
#import "FirstViewController.h" #import "GSHealthKitManager.h" @interface FirstViewController () @property (ikkeatomisk, svak) IBOutlet UILabel * ageLabel; @property (ikkeatomisk, svak) IBOutlet UITextField * weightTextField; @end @implementation FirstViewController - (IBAction) healthIntegrationButtonSwitched: (UISwitch *) avsender if (sender.isOn) [[GSHealthKitManager sharedManager] requestAuthorization]; else // Mulig deaktiver HealthKit-funksjonaliteten i appen din. - (IBAction) readAgeButtonPressed: (id) avsender NSDate * birthDate = [[GSHealthKitManager sharedManager] readBirthDate]; hvis (birthDate == nil) // Hver av brukerne har ikke angitt datoen, eller det oppstod en feil. Bare kom tilbake. komme tilbake; NSDateComponents * ageComponents = [[NSCalendar currentCalendar] komponenter: NSCalendarUnitYear fromDate: birthDate toDate: [NSDate date] options: 0]; self.ageLabel.text = [@ (ageComponents.year) stringValue]; - (IBAction) writeWeightButtonPressed: (id) avsender [[GSHealthKitManager sharedManager] writeWeightSample: self.weightTextField.text.floatValue]; @slutt
Hvis du har noen iOS-utviklingserfaring, bør implementeringen ikke være vanskelig å forstå. I den første visningskontrolleren svarer vi på brukeren å bytte bryteren og trykke på en av knappene. Hver av disse interaksjonene utløser en metode for GSHealthKitManager
klasse.
Det er en grunn til at jeg har valgt å bruke en bryter for å spørre brukerens tillatelse til å få tilgang til deres HealthKit-data. Når du forstår implementeringen, vil du forstå at det er en mye bedre løsning.
Det er enkelt for brukeren å forstå at når apparatet er på, integrerer appen med HealthKit. Når det er av, gjør det ikke. I tillegg til at du slår på denne bryteren for første gang, vil brukeren be om å gi tilgang til helsedatatypene som appen skal bruke. Dette er igjen en god brukeropplevelse, fordi brukeren forstår hvorfor hun blir bedt om, og hvilke fordeler hun får ved å tillate tilgang.
I Prosjektnavigator, åpen Main.storyboard. I den første scenen velger du bryteren. I verktøy ruten til høyre, åpne Tilkoblingsinspektør og i Sendte hendelser delen, dra fra Verdi endret til Først Se kontrolleren i Dokumentoversikt. Fra popup-menyen som viser oppføringene til visningskontrollen, velger du healthIntegrationButtonSwitched:
. Dette sikrer healthIntegrationButtonSwitched:
Metoden kalles når bryteren byttes.
Trinnene for å koble til Lese og Skrive knappene er nesten identiske. Klikk på Lese knappen, bare denne gangen, dra fra Berør på innsiden hendelsen til den første visningskontrolløren. Velg readAgeButtonPressed:
handling fra popup-menyen.
Klikk på Skrive knappen og dra av Berør på innsiden hendelsen til First View Controller, velg writeWeightButtonPressed:
metode fra popup-menyen.
Vi må nå koble utsalgssteder som vi erklærte for brukergrensesnittelementene. trykk Styre og dra fra Først Vis kontrolleren til etiketten med de to spørsmålstegnene. Fra popup-menyen med tittelen Utsalgssteder, klikk på ageLabel
. Dette kobler uttaket til etiketten.
Gjenta disse trinnene for tekstfeltet, og koble det til weightTextField
uttak av visningsregulatoren.
Den første scenen skal nå være fullt funksjonell. Start appen og slå på bryteren. Du bør bli bedt om følgende brukergrensesnitt for HealthKit-tillatelser:
Pass på at du slår på begge bryterne før du trykker på den Ferdig, Ellers vil appen din ikke ha tilgang til dataene vi trenger i prøveappen.
Du kan nå prøve å trykke på Lese knapp. Hvis du kjører appen i iOS-simulatoren, vil det nok ikke skje noe fordi du ikke har angitt en fødselsdato. Du kan gå over til helseapplikasjonen i iOS-simulatoren og sette den.
Du kan nå gå tilbake til vår HealthBasics app og trykke på Lese knappen igjen. Denne gangen skal alderen din vises.
Du kan også teste vektdeling. Velg vekttekstfeltet og skriv inn en verdi i kilo. Når du trykker på Skrive, gå tilbake til helseprogrammet og i Helsedata kategorien, velg Kroppsmålinger og Vekt. Prøven du nettopp har lagt til, skal være synlig.
Så langt har du lært grunnleggende om å jobbe med HealthKit.
I den andre delen av vår prøveapp, viser jeg deg hvordan du kan skrive en treningsøkt til HealthKit. Dette er nyttig hvis du bygger noen form for trening (kjører, sykler, går, etc.) app. De fleste byggesteinene er like.
GSHealthKitManager
KlasseVi starter med å utvide GSHealthKitManager
klasse. Legg til følgende metodedeklarasjon til GSHealthKitManager.h:
- (Void) writeWorkoutDataFromModelObject: (id) workoutModelObject;
Legg til en ny delingstype til requestAuthorizationToShareTypes: readTypes: ferdigstillelse:
metode ved å legge til treningstypen til writeTypes
matrise.
NSArray * writeTypes = @ [[HKObjectType quantityTypeForIdentifier: HKQuantityTypeIdentifierBodyMass], [HKObjectType workoutType]];
Til slutt legger du til writeWorkoutDataFromModelObject:
metode nederst på GSHealthKitManager
klasse.
- (void) writeWorkoutDataFromModelObject: (id) workoutModelObject // I en ekte verden app, ville du passere i et modellobjekt som representerer treningsdataene dine, og du vil trekke de relevante dataene her og sende den til HealthKit-treningsmetoden. // For enkelhets skyld i dette eksemplet, vil vi bare angi vilkårlig 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 * trening = [HKWorkout workoutWithActivityType: HKWorkoutActivityTypeRunning startDate: startDate endDate: endDate varighet: varighet totalEnergyBurned: null totalDistance: distanceQuantity metadata: null]; [self.healthStore saveObject: trening medFullføring: ^ (BOOL suksess, NSError * feil) NSLog (@ "Lagre trening til helseStore - suksess:% @", suksess? @ "JA": @ "NEI"); hvis (feil! = null) NSLog (@ "feil:% @", feil); ];
I min egen app, Routie, har jeg brukt tilnærmingen til å sende en modellobjekt til writeWorkoutDataFromModelObject:
metode, delegerer tung løft til lederklassen. Sistnevnte trekker de nødvendige dataene fra modellobjektet og sender informasjonen til HKHealthStore
forekomst. Jeg tror det er en god tilnærming for å holde HealthKit-relatert kode begrenset i lederklassen.
Gjennomføringen av writeWorkoutDataFromModelObject:
metoden er ganske enkel. Det er bare tre trinn:
HKWorkout
objekt ved å påkalle en av bekvemmelighetsinitiatorene til klassen.HKWorkout
protestere mot HKHealthStore
forekomst.Dette er første gang vi har jobbet med HKWorkout-klassen, så la meg kort introducere denne klassen. HealthKit-rammen bruker HKWorkout
klasse for å spore aktiviteter. Treninger er for det meste uforanderlige, så du må gi treningsverdiene under initialiseringen.
Når du initialiserer en treningsøkt, må du oppgi en aktivitetstype, en startdato og en sluttdato. Du kan valgfritt passere i total avstand, total energi brent og metadata. Metadataene kan brukes til å tildele tilleggsinformasjon til treningen. Dette er veldig nyttig når du vil dele mer informasjon om en treningsøkt med et annet program du også opprettet.
writeWorkoutButtonPressed:
HandlingÅpen SecondViewController.m og legg til følgende import til toppen av filen:
#import "GSHealthKitManager.h"
Deretter implementerer du writeWorkoutButtonPressed:
metode som vist nedenfor.
- (IBAction) writeWorkoutButtonPressed: (id) sender // I en ekte verden app, vil du få referanse til et relevant modellobjekt og sende det til følgende metode. [[GSHealthKitManager sharedManager] requestAuthorization]; [[GSHealthKitManager sharedManager] writeWorkoutDataFromModelObject: null];
Vi vil bare legge til en enkelt knapp til den andre siden av appen for å skrive treningen. Åpen Main.storyboard og fokusere på den andre scenen. Slett etikettene som er i øyeblikket i Second View Controller.
Legg til en knapp i midten av visningskontrollens visning og sett tittelen til Skriv trening. Koble dens Berør på innsiden hendelse til writeWorkoutButtonPressed:
handling vi implementerte i forrige trinn.
Bygg og kjør programmet, og sett på Health Integration-bryteren på. De Helsetilgang skjermen vil bli presentert med den nylig forespurte treningen type slått av. Slå den på og trykk Ferdig. Dette er bare nødvendig, fordi vi har lagt til treningsdelingstypen til listen over deltyper. Dette betyr at vi må spørre brukeren om tillatelse før vi bruker den.
Åpne den andre kategorien nederst og trykk Skriv trening. Hvis alt gikk riktig, bør du se følgende melding i Xcode's Console:
Lagre trening til helseStore - suksess: JA
Nå kan du bytte til helseapplikasjonen og gå til Helsedata > Fitness > økter. Der bør du se treningen som ble lagt til.
I denne veiledningen har jeg vist deg hvordan du kan skrive en treningsøkt til HealthKit. Jeg har også vist deg hvordan du separerer HealthKit-relatert kode ved å sende et modellobjekt til metoden som skriver treningen til HealthKit.
Jeg håper du har hatt denne opplæringen og at du har lært alt det grunnleggende du trenger for å gå der ute og integrere din egen app med HealthKit. Jeg håper også at jeg har overbevist deg om å gi HealthKit en prøve.
Gi meg beskjed i kommentarene hvordan du likte denne opplæringen eller om noe var uklart. Du kan også finne meg på Twitter.
Listen nedenfor inneholder en rekke relevante lenker, slik at du raskt kan hoppe til det du trenger: