HealthKit-rammen ble introdusert i fjor på WWDC 2014 som et enkelt sted der apper kan lagre, dele og lese helserelaterte data. Den nye helseprogrammet, som er brukerens syn på dataene, var et av flaggskipets egenskaper i IOS 8.
En av de viktigste fordelene med HealthKit er at trenings- og helsemessige apps kan enkelt dele data med hverandre. I løpet av det siste året har mange utviklere vedtatt HealthKit i sine applikasjoner, og teknologiske kunnskaper har kommet til å forvente at noen treningsapp integrerer med HealthKit.
Det er mange fordeler, gotchas og beste praksis når du arbeider med dette nye og spennende rammeverket. Nylig har jeg hatt førstehånds erfaring som jobber med HealthKit-rammen når jeg legger til støtte for HealthKit til en av mine apps, Routie. Hvis du vurderer å bruke HealthKit i din egen app, så er denne opplæringen for deg.
Jeg har allerede nevnt noen av fordelene med HealthKit, men hvis du ikke er solgt ennå, så la meg bare si at det egentlig ikke er så vanskelig å integrere HealthKit. Jeg ville til og med gå videre og si at det er lettere enn de fleste andre nye rammer som Apple introduserte. Tydeligvis er dette avhengig av hva du vil oppnå med det. Men generelt vil jeg si at forholdet mellom innsatsen som trengs for å integrere HealthKit og fordelene det bringer til brukerne, er veldig gunstig.
Bortsett fra den enkle integrasjonen i eksisterende apper, gir den også muligheten til å bygge helt ny kategori apps. For eksempel kan du trekke ulike data fra HealthKit, som brukerens treningsøkt eller blodtrykk, og vise dem på en interessant måte, og la det harde arbeidet med å samle dataene til andre apper.
Mitt mål med denne opplæringen er å lære deg det grunnleggende ved å bygge en prøveapp. I tillegg vil jeg gi deg en rekke nyttige tips og triks om hvordan du kan eller bør integrere HealthKit i dine egne apper. Etter å ha lest denne artikkelen, bør du ha en grunnleggende forståelse av HealthKit, klar til å bruke den i appene dine.
Følgende liste inneholder en rekke grunnleggende fakta om HealthKit som du bør være oppmerksom på:
For mer informasjon om HealthKit-rammen, besøk Apples HealthKit Framework Reference.
Jeg vet at du sannsynligvis er ivrig etter å starte med prøveprosjektet nå, men det er noen viktige ting du bør være oppmerksom på før du dykker inn.
Nå som vi fikk dette ut av veien, la oss komme i gang med opplæringen.
Vi vil bygge en enkel app som integreres med HealthKit og forklarer noen av de grunnleggende konseptene i rammen. Spesielt vil vi:
Start Xcode og velg Fil > Ny > Prosjekt… Fra iOS> Søknad delen, velg Tabbed Application mal og klikk neste.
Tast inn HealthBasics som prosjektets Produktnavn og klikk neste. Velg hvor du vil lagre prosjektet og klikk Skape.
I Prosjektnavigator til venstre, klikk på prosjektet, velg HealthBasics mål, og åpne Capabilities fanen øverst. Rull ned til HealthKit delen og aktiver HealthKit bytte bryteren til høyre. Bak kulissene vil Xcode gjøre det nødvendige for å aktivere HealthKit.
For dette prosjektet bruker vi ikke størrelsesklasser. Fordi størrelsesklasser er aktivert som standard, må vi manuelt deaktivere dem i Xcode. I Prosjektnavigator til venstre, velg Main.storyboard. Åpne Filinspektør til høyre og fjern markeringen i avmerkingsboksen Bruk størrelsesklasser.
Xcode vil vise deg en advarselsdialog. Slett den ved å klikke Deaktiver størrelsesklasser, men gjør for å holde størrelsesklassedata for iPhone som vist under.
Fjern de to etikettene i First View Controller. Deretter drar du en etikett og en bryter fra Objektbibliotek til høyre på First View Controller. Endre etikettens tekst til Helseintegrasjon og sett bryterens tilstand til av.
Legg til to merker og en knapp til første visningskontrollen. Endre den første etikettens tekst til Brukerens alder:, endre den andre etikettens tekst til ??, og juster dem horisontalt som vist på skjermbildet nedenfor. Endelig, endre knappens tittel til Lese og plasser den til høyre for den andre etiketten. Den første scenen skal nå se slik ut:
Vi er ikke ferdige ennå. Legg til en etikett, et tekstfelt og en knapp til First View Controller, tilpass dem horisontalt som vist nedenfor. Endre etikettens tekst til Brukerens vekt: og endre knappens tittel til Skrive.
Velg tekstfeltet du nettopp har lagt til, og i Attributtsinspektør, endre dens Tastaturtype til Tall og tegnsetting. Det er det. Den første scenen skal nå se slik ut:
Vi skal holde HealthKit-relatert kode i en egen klasse, den GSHealthKitManager
klasse. La oss lage den klassen nå.
I Prosjektnavigator, høyreklikk på HealthBasics gruppe og velg Ny fil ... . Forsikre Cocoa Touch Class er valgt fra listen over maler og klikker neste. Gi klassen navn GSHealthKitManager og klikk neste.
Åpne headerfilen til GSHealthKitManager
klasse og erstatt filens innhold med følgende kode. Senere vil vi ringe disse metodene fra FirstViewController
klasse.
#importere@interface GSHealthKitManager: NSObject + (GSHealthKitManager *) sharedManager; - (ugyldig) forespørselAuthorization; - (NSDate *) readBirthDate; - (ugyldig) writeWeightSample: (CGFloat) vekt; @slutt
Deretter åpner du implementasjonsfilen til GSHealthKitManager
klasse og erstatte innholdet med følgende:
#import "GSHealthKitManager.h" #import@interface GSHealthKitManager () @property (nonatomic, behold) HKHealthStore * healthStore; @end @implementation GSHealthKitManager + (GSHealthKitManager *) sharedManager static dispatch_once_t pred = 0; statisk GSHealthKitManager * instance = null; dispatch_once (& pred, ^ instance = [[GSHealthKitManager alloc] init]; instance.healthStore = [[HKHealthStore alloc] init];); returnere forekomst; - (void) requestAuthorization if ([HKHealthStore isHealthDataAvailable] == NO) // Hvis enheten vår ikke støtter HealthKit -> returnerer. komme tilbake; NSArray * readTypes = @ [[HKObjectType characteristicTypeForIdentifier: HKCharacteristicTypeIdentifierDateOfBirth]]; NSArray * writeTypes = @ [[HKObjectType quantityTypeForIdentifier: HKQuantityTypeIdentifierBodyMass]]; [self.healthStore requestAuthorizationToShareTypes: [NSSet setWithArray: readTypes] readTypes: [NSSet setWithArray: writeTypes] fullføring: null]; - (NSDate *) readBirthDate NSError * error; NSDate * dateOfBirth = [self.healthStore dateOfBirthWithError: & error]; // Convenience metode for HKHealthStore å få fødselsdato direkte. hvis (! dateOfBirth) NSLog (@ "Enten det oppstod en feil å hente brukerens aldersinformasjon eller ingen har blitt lagret ennå. I appen din, prøv å håndtere dette grasiøst."); returdatoOfBirth; - (void) writeWeightSample: (CGFloat) vekt // Hver mengde består av en verdi og en enhet. HKUnit * kilogramUnit = [HKUnit gramUnitWithMetricPrefix: HKMetricPrefixKilo]; HKQuantity * weightQuantity = [HKQuantity quantityWithUnit: kilogramUnit doubleValue: weight]; HKQuantityType * weightType = [HKQuantityType quantityTypeForIdentifier: HKQuantityTypeIdentifierBodyMass]; NSDate * nå = [NSDate dato]; // For hver prøve, trenger vi en prøvetype, mengde og en dato. HKQuantitySample * weightSample = [HKQuantitySample quantitySampleWithType: weightType quantity: weightQuantity startDate: now endDate: now]; [self.healthStore saveObject: weightSample withCompletion: ^ (BOOL suksess, NSError * feil) if (! suksess) NSLog (@ "Feil mens du sparer vekt (% f) til Health Store:% @.", vekt, feil) ; ]; @slutt
Mens det meste av HealthKit-koden er lett nok til å forstå, la oss gå over hver metode for å sikre at vi er på samme side.
sharedManager
er en klassemetode som lager singleton-objektet første gang det kalles, og returnerer den forekomsten hver gang metoden er påkalt. De dispatch_once
funksjon er en GCD (Grand Central Dispatch) -funksjon som garanterer at blokken som sendes til den, kalles bare én gang, selv om sharedManager
Metoden ville bli kalt fra flere tråder samtidig.requestAuthorization
er en metode som spør HealthKit-butikken for tillatelser til å lese og / eller skrive de spesifikke dataene vi trenger. Du må ringe denne metoden før du bruker noen av skrive- / lese-APIene til HKHealthStore
klasse. Hvis brukeren nekter noen (eller alle) tillatelser, vil HealthKit ikke informere deg om det. Det faktum at brukeren ikke vil dele noen typer data, er informasjon i seg selv. Det er så mye Apple bryr seg om personvern.readBirthDate
Metoden returnerer brukerens fødselsdato. Det kommer tilbake nil
hvis det oppsto en feil eller hvis brukeren ikke har angitt en fødselsdato.writeWeightSample:
sparer en vektmåling til HealthKit. Jeg har kommentert koden slik at du bør ha en generell ide om hva som skjer i metoden. Når vi har HKQuantitySample
objekt, vi lagrer det til HKHealthStore
eksempel ved å bruke sin saveObject: withCompletion:
metode. Denne metoden brukes for alle typer helsedata, og vi vil også bruke den i den andre delen av denne opplæringen når du lagrer treningsøktene.I dette trinnet møtte du en rekke HealthKit-klasser. Du kan lese mer om hver klasse i HealthKit Framework Reference, men jeg gir deg et kort sammendrag av hver klasse.
HKHealthStore
Dette er ditt vindu til HealthKit data. Apple anbefaler at du bruker bare en forekomst av denne klassen i appen din, og som egner seg godt til singleton-mønsteret. Du bruker den til å spørre brukeren om tillatelser, lagre prøver og / eller treningsøktene til HealthKit, og spørre de lagrede dataene. Dette er bare noen få av oppgavene til HKHealthStore
klasse.HKUnit
Forekomster av denne klassen kan representere enten grunnleggende enheter, som meter, sekunder og gram, eller komplekse enheter som er opprettet ved å kombinere grunnleggende enheter, for eksempel km / h eller eller g / m³. Komplekse enheter kan enkelt opprettes fra strenge.HKQuantity
Forekomster av denne klassen lagrer en verdi (representert ved dobbel) for en gitt enhet (representert av HKUnit
). Du kan bruke doubleValueForUnit:
metode for å konvertere mengdenes verdi til enheten som er sendt inn. Et eksempel på en slik konvertering ville skape avstandskvantitet med måleenhet og be om verdien i føtter.HKQuantityType
HealthKit bruker kvantetyper til å lage prøver som lagrer en numerisk verdi. Det anbefales å bruke quantityTypeForIdentifier:
når du oppretter kvantetyper. Noen få eksempler på mengde typer er sykkelavstand, energi brent, trinn og fly klatret.HKQuantitySample
En forekomst av denne klassen representerer et utvalg som har en mengde type (representert av HKQuantityType
), en mengde (representert av HKQuantity
), og en start- og sluttdato. Hvis prøven ikke spenner over en tidsperiode, kan sluttdatoen være den samme som startdatoen.Vi kan nå bruke GSHealthKitManager
singleton fra hvor som helst i vår søknad for å jobbe med HealthKit.
I denne opplæringen lærte du om grunnleggende i HealthKit-rammeverket. Jeg har introdusert deg til rammene og påpekt noen av advarslene til å passe på. Vi har også bygget grunnlaget for prøveappen og implementert GSHealthKitManager
klassen, som vi skal bruke til å samhandle med HealthKit.
I den andre delen av denne serien fortsetter vi å bygge prøveappen og videre integrere HealthKit. Du finner kildefilene for denne opplæringen på GitHub.