Komme i gang med HealthKit Del 1

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.

Hvorfor bør jeg bryr meg om HealthKit?

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.

Hva vil du lære?

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.

Hva du bør vite

Følgende liste inneholder en rekke grunnleggende fakta om HealthKit som du bør være oppmerksom på:

  • HealthKit-rammen er tilgjengelig siden iOS 8. Merk at den bare er tilgjengelig på iPhone, ikke iPad.
  • Apple er seriøs om personvern, og derfor må du eksplisitt be om tilgang til å lese og / eller skrive til HealthKit for hver datatype du trenger for å få tilgang. Brukeren har muligheten til å tillate tilgang for enkelte typer og nekte den for andre.
  • HealthKit-rammen gjør stor bruk av underklasse.
  • Det er to hoveddatatyper, kjennetegn og prøver. Egenskaper, for eksempel brukerens fødselsdato eller blodtype, endres vanligvis ikke. Eksempel representerer data på et bestemt tidspunkt.
  • Antall prøver er de vanligste datatyper. De inkluderer brukerens høyde og vekt, trinn som er tatt, brukerens temperatur, pulsfrekvens osv.
  • økter, som tilhører prøvekategori, er beregnet spesielt for å representere løp, turer, turer, etc..

For mer informasjon om HealthKit-rammen, besøk Apples HealthKit Framework Reference.

Før vi kommer i gang

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.

  • HealthKit-butikken er kryptert når brukerens telefon er låst. Dette betyr at du ikke kan lese fra det når appen din er i bakgrunnen. Skrive til HealthKit fungerer imidlertid selv når telefonen er låst.
  • Du må forklare i App Store-beskrivelsen din og i appen din hvordan appen din skal bruke dataene hentet fra HealthKit. Hvis du ikke gjør det, kan det føre til avvisning av appen din.
  • Det er en ny seksjon i retningslinjene for App Store, som dekker HealthKit. Du bør definitivt lese gjennom det før du bestemmer deg for å legge til støtte for HealthKit eller ikke.
  • Når appen din er integrert med HealthKit, må du oppgi en personvernpolicy for den. Apple anbefaler til og med noen dokumenter som angir hvilke helsemessige retningslinjer for personvern som skal se ut. Det er viktig at personvernreglene forteller brukeren hvordan appen din behandler dataene sine.

Nå som vi fikk dette ut av veien, la oss komme i gang med opplæringen.

Prosjektet

Vi vil bygge en enkel app som integreres med HealthKit og forklarer noen av de grunnleggende konseptene i rammen. Spesielt vil vi:

  • opprett et nytt prosjekt fra bunnen av og aktiver HealthKit
  • spør brukerens tillatelse til å få tilgang til deres helserelaterte data
  • les brukerens fødselsdato
  • skriv en vektprøve til HealthKit
  • skriv en treningsøkt til HealthKit

1. Sette opp prosjektet

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.

2. Aktiverer HealthKit

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.


3. Opprette brukergrensesnittet

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:

4. Opprette HealthKit Manager

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

Konklusjon

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.