Noțiuni de bază cu HealthKit Partea 2

În prima parte a acestui tutorial, te-am prezentat în cadrul HealthKit. Bazându-mă pe propria mea experiență de integrare a HealthKit într-una din aplicațiile mele, am subliniat câteva lucruri importante care trebuie păstrate în minte. De asemenea, am început să lucrăm la aplicația noastră de probă, HealthBasics, care va explica conceptele de baza de a lucra cu HealthKit.

În prima parte, am implementat GSHealthKitManager clasa, pe care o vom folosi pentru a interacționa cu HealthKit. Să folosim acum GSHealthKitManager pentru implementarea funcționalității primului controler de vizualizare al aplicației pentru eșantion.

1. Implementarea controlerului de vizualizare a primului ecran

În Project Navigator, deschis FirstViewController.m și înlocuiți conținutul cu următoarele:

#import "FirstViewController.h" #import "GSHealthKitManager.h" @interface FirstViewController () @property (nonatomic, slab) IBOutlet UILabel * ageLabel; @property (nonatomic, slab) IBOutlet UITextField * weightTextField; @end @implementation FirstViewController - (IBAction) healthIntegrationButtonSwitched: (UISwitch *) expeditor if (sender.isOn) [[GSHealthKitManager sharedManager] requestAuthorization];  altfel // Posibil să dezactivați funcția HealthKit în aplicația dvs.  - (IBAction) readAgeButtonPressed: (id) expeditor NSDate * birthDate = [[GSHealthKitManager sharedManager] readBirthDate]; if (birthDate == zero) // Fie utilizatorul nu a stabilit data, fie a apărut o eroare. Întoarce-te. întoarcere;  NSDateComponents * ageComponents = [[NSCalendar currentCalendar] componente: NSCalendarUnitAear de la Data: Data nașterii până la Data: [DateDate date] opțiuni: 0]; self.ageLabel.text = [@ (vârstăComponents.antie) stringValue];  - (IBAction) writeWeightButtonPressed: (id) expeditor [[GSHealthKitManager sharedManager] writeWeightSample: self.weightTextField.text.floatValue];  @Sfârșit 

Dacă aveți o experiență de dezvoltare iOS, atunci implementarea nu ar trebui să fie dificil de înțeles. În primul controler de vizualizare, răspundem la utilizatorul schimbând comutatorul și atingând unul dintre butoane. Fiecare dintre aceste interacțiuni declanșează o metodă a GSHealthKitManager clasă.

Există un motiv pentru care am ales să folosesc un switch pentru a solicita permisiunea utilizatorului să acceseze datele HealthKit. După ce înțelegeți implementarea, veți înțelege că este o soluție mult mai bună.

Este ușor pentru utilizatori să înțeleagă că, atunci când comutatorul este pornit, aplicația se integrează cu HealthKit. Când este oprit, nu este. În plus, activarea acestui parametru pentru prima dată va solicita utilizatorului să acorde acces la tipurile de date de sănătate pe care aplicația le va utiliza. Aceasta, din nou, este o experiență bună pentru utilizatori, deoarece utilizatorul înțelege de ce este solicitată și ce beneficii primește accesând accesul.

2. Conectarea interfeței utilizator

În Project Navigator, deschis Main.storyboard. În prima scenă, selectați comutatorul. În Utilități în dreapta, deschideți fereastra Conectarea inspectorului și, în Evenimente trimise secțiune, trageți de la Valoarea a fost modificată la Primul Vizualizați controlerul în Schița documentelor. Din meniul pop-up care afișează acțiunile controlerului de vizualizare, selectați healthIntegrationButtonSwitched:. Aceasta asigură healthIntegrationButtonSwitched: metoda se numește ori de câte ori comutatorul este comutat.

Pașii pentru conectarea Citit și Scrie butoanele sunt aproape identice. Apasă pe Citit buton, numai de data asta, trageți de la Touch Up Inside eveniment la controlerul de vizualizare prima. Selectează readAgeButtonPressed: acțiune din meniul pop-up.

Apasă pe Scrie buton și trageți de la Touch Up Inside la primul controler de vizualizare, selectați writeWeightButtonPressed: din meniul pop-up.

Acum trebuie să conectăm prizele pe care le-am declarat elementelor interfeței utilizator. presa Control și trageți de la Primul Vizualizați controlerul la eticheta cu cele două semne de întrebare. Din meniul pop-up intitulat Prize, Click pe ageLabel. Aceasta va conecta priza la etichetă.

Repetați acești pași pentru câmpul de text, conectându-l la câmpul weightTextField ieșirea controlerului de vizualizare.

3. Construiți și executați

Prima scenă ar trebui acum să fie pe deplin funcțională. Lansați aplicația și porniți comutatorul. Ar trebui să vi se solicite următoarea interfață de utilizator pentru permisiunile HealthKit:

Asigurați-vă că ați activat ambele comutatoare înainte de atingere Terminat, în caz contrar, aplicația dvs. nu va avea acces la datele de care avem nevoie în aplicația probă.

Acum puteți încerca să atingeți Citit buton. Dacă rulați aplicația în Simulatorul iOS, probabil că nu se va întâmpla nimic, deoarece nu ați stabilit data nașterii. Puteți să vă îndreptați spre aplicația Sănătate din Simulatorul iOS și setați-o.

  • Deschideți aplicația Sănătate.
  • Selectați Date privind sănătatea fila.
  • Atingeți Pe mine.
  • Atingeți Editați | ×.
  • Atingeți Data nasterii și setați o dată. Atingeți Terminat.

Acum puteți reveni la aplicația noastră HealthBasics și atingeți Citit butonul din nou. De această dată ar trebui afișată vârsta.

De asemenea, puteți testa partajarea greutății. Selectați câmpul de text pentru greutate și introduceți o valoare în kilograme. După ce atingeți Scrie, mergeți înapoi la aplicația Sănătate și, în Date privind sănătatea , selectați Masurarea corpului și Greutate. Proba pe care tocmai ați adăugat-o trebuie să fie vizibilă.


Până acum, ați învățat elementele de bază ale colaborării cu HealthKit.

  • cum să solicitați permisiunea utilizatorului
  • cum să citiți și să scrieți date de bază
  • cum să încapsulați codul HealthKit într-o clasă separată

4. Adăugarea unui antrenament

În a doua parte a aplicației noastre de probă, vă voi arăta cum să scrieți un antrenament la HealthKit. Acest lucru este util dacă construiți orice tip de antrenament (alergare, ciclism, mers pe jos etc.). Majoritatea blocurilor sunt similare.

Pasul 1: Extinderea GSHealthKitManager Clasă

Începem prin extinderea GSHealthKitManager clasă. Adăugați următoarea declarație de metodă la GSHealthKitManager.h:

- (Void) writeWorkoutDataFromModelObject: (id) workoutModelObject;

Adăugați un nou tip de acțiune la requestAuthorizationToShareTypes: readTypes: finalizare: adăugând tipul de antrenament la writeTypes mulțime.

NSArray * writeTypes = @ [[HKObjectType quantityTypeForIdentifier: HKQuantityTypeIdentifierBodyMass], [HKObjectType workoutType]];

În cele din urmă, adăugați writeWorkoutDataFromModelObject: la sfârșitul metodei GSHealthKitManager clasă.

- (void) writeWorkoutDataFromModelObject: (id) workoutModelObject // Într-o aplicație din lumea reală, ați trece într-un obiect model care reprezintă datele antrenamentului dvs. și ați tras datele relevante aici și le veți transfera la metoda de antrenament HealthKit. // Din motive de simplitate a acestui exemplu, vom seta doar date arbitrare. NSDate * startDate = [data NSDate]; NSDate * endDate = [data startDateByAddingTimeInterval: 60 * 60 * 2]; Durata NSTimeInterval = [endDate timeIntervalSinceDate: startDate]; Distanta de distanta CGFloat = 57000 .; Cantitatea HK ​​* distanțaCumătate = [HKQuantity quantityWithUnit: [HKUnit meterUnit] doubleValue: (distanță dublă) Inițiatori]; HKWorkout * antrenament = [HKWorkout workoutWithActivityType: HKWorkoutActivityTypeRunning startDate: startDate endDate: endDate duration: duration totalEnergyBurned: total zeroDistance: distanceMetadata metabata: zero]; [self.healthStore saveObject: antrenament cuCompletion: ^ (succes BOOL, eroare NSError *) NSLog (@ "Salvarea antrenamentului în HealthStore - succes:% @", succes? @ "YES": @ "NO"); dacă (eroare! = zero) NSLog ("eroare:% @", eroare); ]; 

În aplicația mea, Routie, am folosit abordarea trecerii unui obiect model la writeWorkoutDataFromModelObject: , delegarea ridicării grele la clasa de manager. Acesta din urmă trage datele necesare din obiectul model și transmite informația către HKHealthStore instanță. Cred că este o abordare bună pentru păstrarea codului legat de HealthKit limitat în clasa manager.

Punerea în aplicare a directivei writeWorkoutDataFromModelObject: metoda este destul de simplă. Există doar trei pași:

  1. Mai întâi pregătim datele. În acest exemplu, facem numerele în sus.
  2. Apoi creăm un HKWorkout obiecte invocând unul dintre inițiatorii de confort ai clasei.
  3. În cele din urmă, salvăm HKWorkout obiecte față de HKHealthStore instanță.

Aceasta este prima dată când am lucrat cu clasa HKWorkout, așa că permiteți-mi să introduc pe scurt această clasă. Cadrul HealthKit utilizează HKWorkout clasa pentru a urmări activitățile. Antrenamentele sunt în mare parte imuabile, deci trebuie să oferiți valorile antrenamentului în timpul inițializării.

Când inițializați un antrenament, vi se cere să furnizați un tip de activitate, o dată de începere și data de încheiere. Puteți trece opțional în distanța totală, energia totală arsă și metadatele. Metadatele pot fi folosite pentru a atribui informații suplimentare antrenamentului. Acest lucru este foarte util atunci când doriți să împărtășiți mai multe informații despre un antrenament cu o aplicație diferită pe care ați creat-o.

Pasul 2: Implementarea writeWorkoutButtonPressed: Acțiune

Deschis SecondViewController.m și adăugați următorul import în partea de sus a fișierului:

#import "GSHealthKitManager.h"

Apoi, implementați writeWorkoutButtonPressed: așa cum se arată mai jos.

- (IBAction) writeWorkoutButtonPressed: (id) expeditor // Într-o aplicație din lumea reală, veți obține o referință la un obiect model relevant și îl veți trece la următoarea metodă. [[GSHealthKitManager sharedManager] cerereAutorizare]; [[GSHealthKitManager sharedManager] writeWorkoutDataFromModelObject: nul]; 

Pasul 3: Crearea interfeței de utilizare a antrenamentului

Vom adăuga un singur buton la a doua scenă a aplicației pentru a scrie antrenamentul. Deschis Main.storyboard și să se concentreze pe a doua scenă. Ștergeți etichetele care sunt în prezent în Controller secundar.

Adăugați un buton în centrul vizualizării controlerului de vizualizare și setați titlul acestuia Scrie antrenament. Conectați-l Touch Up Inside eveniment la writeWorkoutButtonPressed: acțiunea pe care am implementat-o ​​în etapa anterioară.

5. Testarea

Construiți și executați aplicația și configurați comutatorul de integrare a sănătății. Accesul la sănătate ecranul va fi prezentat cu tipul de antrenament nou solicitat oprit. Porniți-l și atingeți Terminat. Acest lucru este necesar doar pentru că am adăugat tipul de partajare a antrenamentului în lista tipurilor de acțiuni. Aceasta înseamnă că trebuie să cerem permisiunea utilizatorului înainte de ao folosi.

Deschideți a doua filă din partea inferioară și apăsați Scrie antrenament. Dacă totul a mers bine, ar trebui să vedeți următorul mesaj în Consola Xcode:

Salvarea antrenamentului la HealthStore - succes: DA

Acum puteți să treceți la aplicația Sănătate și să mergeți la Date privind sănătatea > Fitness > antrenamente. Acolo ar trebui să vedeți antrenamentul care tocmai a fost adăugat.

Concluzie

În acest tutorial, v-am arătat cum puteți scrie un antrenament la HealthKit. De asemenea, v-am arătat cum să separați codul HealthKit prin trecerea unui obiect model la metoda care scrie antrenamentul la HealthKit.

Sper că v-ați bucurat de acest tutorial și că ați învățat toate elementele de bază de care aveți nevoie pentru a merge acolo și integrați-vă propria aplicație cu HealthKit. De asemenea, sper că v-am convins să faceți o încercare pentru HealthKit.

Dați-mi voie să știu în comentariile dvs. cum v-ați plăcut acest tutorial sau dacă ceva nu a fost clar. Mă puteți găsi și pe Twitter.

Link-uri

Lista de mai jos include un număr de linkuri relevante, astfel încât să puteți sări rapid la ceea ce aveți nevoie:

  • Apple HealthKit cadru de referință: Eu foarte recomandăm lectură.
  • Fit: Stocați și recuperați date HealthKit: aplicație HealthKit probată furnizată de Apple
  • App Store Review Guidelines - HealthKit: secțiunea din Ghidul de revizuire App Store care acoperă HealthKit
  • Introducerea HealthKit (Videoclipul pentru sesiunea WWDC 2014)
  • Ce este nou în HealthKit (WWDC 2015 Video Sesiune)
Cod