Cadrul HealthKit a fost introdus anul trecut la WWDC 2014 ca un singur loc în care aplicațiile pot stoca, partaja și citi datele referitoare la sănătate. Noua aplicație Health, care este viziunea utilizatorului în acele date, a fost una dintre caracteristicile emblematice ale iOS 8.
Unul dintre principalele avantaje ale HealthKit este că aplicațiile de fitness și de sănătate pot împărți eforturile reciproce. În cursul anului trecut, mulți dezvoltatori au adoptat HealthKit în aplicațiile lor și utilizatorii cu îndemânare tehnică au ajuns să se aștepte ca orice aplicație de fitness să se integreze cu HealthKit.
Există multe beneficii, beneficii și cele mai bune practici atunci când lucrați cu acest cadru nou și interesant. Recent, am avut o experiență de primă mână care lucrează cu cadrul HealthKit atunci când adaug un suport pentru HealthKit la una dintre aplicațiile mele, Routie. Dacă intenționați să utilizați HealthKit în propria aplicație, atunci acest tutorial este pentru dvs..
Am menționat deja câteva dintre beneficiile HealthKit, dar dacă nu sunteți încă vânduți, permiteți-mi să spun doar că nu este chiar atât de greu să se integreze HealthKit. Aș merge chiar mai departe și spun că este mai ușor decât majoritatea celorlalte cadre noi pe care Apple le-a introdus. Evident, acest lucru depinde foarte mult de ceea ce vrei sa obtii cu el. Dar, în general, aș spune că raportul dintre efortul necesar pentru a integra HealthKit și beneficiile pe care le aduce utilizatorilor dvs. este foarte favorabil.
În afară de integrarea directă în aplicațiile existente, aceasta oferă și posibilitatea de a construi o nouă categorie de aplicații. De exemplu, puteți extrage diverse date de la HealthKit, cum ar fi antrenamentele utilizatorului sau tensiunea arterială, și le puteți afișa într-un mod interesant, lăsând munca grea de colectare a acelor date către alte aplicații.
Scopul meu cu acest tutorial este de a vă învăța elementele de bază prin construirea unei aplicații de probă. În plus, vă voi oferi o serie de sfaturi utile și trucuri despre cum ați putea sau ar trebui să integrați HealthKit în aplicațiile proprii. După ce ați citit acest articol, trebuie să aveți o înțelegere de bază a HealthKit, gata să o utilizați în aplicațiile dvs..
Următoarea listă conține câteva informații de bază despre HealthKit pe care ar trebui să le cunoașteți:
Pentru mai multe informații despre cadrul HealthKit, vizitați HealthKit Framework Reference.
Știu că probabil sunteți dornici să începeți cu proiectul de eșantion până acum, dar există câteva lucruri importante pe care ar trebui să le cunoașteți înainte de a vă scufunda.
Acum că am scăpat de asta, să începem cu tutorialul.
Vom construi o aplicație simplă care se integrează cu HealthKit și explică câteva dintre conceptele de bază ale cadrului. În special, vom:
Lansați Xcode și selectați Fişier > Nou > Proiect… De la iOS> aplicație secțiune, selectați Aplicație cu file șablon și faceți clic pe Următor →.
introduce HealthBasics ca și proiectul numele produsului și faceți clic pe Următor →. Selectați unde doriți să salvați proiectul și faceți clic pe acesta Crea.
În Project Navigator din stânga, faceți clic pe proiect, selectați HealthBasics țintă și deschideți Capacități în partea de sus. Derulați în jos până la HealthKit și permiteți HealthKit să comute întrerupătorul din dreapta. În spatele scenei, Xcode va face ceea ce este necesar pentru activarea HealthKit.
Pentru acest proiect, nu vom folosi clase de mărime. Deoarece clasele de dimensiuni sunt activate în mod implicit, trebuie să le dezactivați manual în Xcode. În Project Navigator din stânga, selectați Main.storyboard. Deschide Inspector de dosar din dreapta și debifați caseta de selectare Utilizați clase de mărime.
Xcode vă va afișa un dialog de avertizare. Renunțați-l făcând clic Dezactivați clasele de mărime, dar pentru a păstra datele de clasă de mărime pentru iPhone așa cum se arată mai jos.
Eliminați cele două etichete din Vizualizator de prima vedere. Apoi trageți o etichetă și un comutator din Biblioteca de obiecte în partea dreaptă, în primul controler de vizualizare. Schimbați textul etichetei în Integrarea sănătății și setați starea comutatorului la de pe.
Adăugați încă două etichete și un buton la controlerul de vizualizare pentru prima vedere. Schimbați textul primei etichete în Vârsta utilizatorului:, modificați textul celei de-a doua etichete ??, și aliniați-le pe orizontală, după cum se arată în imaginea de mai jos. În cele din urmă, schimbați titlul butonului Citit și poziționați-o în partea dreaptă a celei de-a doua etichete. Prima scenă ar trebui să arate astfel:
Încă nu am terminat. Adăugați încă o etichetă, un câmp de text și un buton la controlerul de vizualizare primul, aliniați-le pe orizontală, după cum se arată mai jos. Schimbați textul etichetei în Greutatea utilizatorului: și schimbați titlul butonului Scrie.
Selectați câmpul de text pe care tocmai l-ați adăugat și în câmpul Atribuții Inspector, schimba Tip tastatură la Numere și punctuație. Asta e. Prima scenă ar trebui să arate astfel:
Vom păstra codul pentru HealthKit într-o clasă separată GSHealthKitManager
clasă. Să creăm acea clasă acum.
În Project Navigator, faceți clic dreapta pe HealthBasics grup și selectați Fișier nou ... . Asigura-te Cocoa Touch Class este selectat din lista de șabloane și faceți clic pe Următor →. Denumiți clasa GSHealthKitManager și faceți clic pe Următor →.
Deschideți fișierul antet al GSHealthKitManager
și înlocuiți conținutul fișierului cu următorul cod. Mai târziu, vom numi aceste metode din FirstViewController
clasă.
#import@interface GSHealthKitManager: NSObject + (GSHealthKitManager *) sharedManager; - (void) requestAuthorization; - (NSDate *) readBirthDate; - (void) writeWeightSample: greutate (CGFloat); @Sfârșit
Apoi, operează fișierul de implementare al GSHealthKitManager
și înlocuiți conținutul cu următoarele:
#import "GSHealthKitManager.h" #import@interface GSHealthKitManager () @property (nonatomic, reține) HKHealthStore * healthStore; @end @implementation GSHealthKitManager + (GSHealthKitManager *) partajatManager static dispatch_once_t pred = 0; static GSHealthKitManager * instanță = zero; dispatch_once (& pre, ^ instanta = [[GSHealthKitManager alloc] init]; instance.healthStore = [[HKHealthStore alloc] init];); instanță retur; - (void) requestAutorizare if ([HKHealthStore isHealthDataAvailable] == NO) // Dacă dispozitivul nostru nu acceptă HealthKit -> return. întoarcere; NSArray * readTypes = @ [[HKObjectType characteristicTypeForIdentifier: HKCharacteristicTypeIdentifierDateOfBirth]]; NSArray * writeTypes = @ [[HKObjectType quantityTypeForIdentifier: HKQuantityTypeIdentifierBodyMass]]; [request self.healthStoreAuthorizationToShareTypes: [NSSet setWithArray: readTypes] readTypes: [NSSet setWithArray: writeTypes] finalizare: nil]; - (NSDate *) readBirthDate eroare NSError *; NSDate * dateOfBirth = [auto.healthStore dateOfBirthWithError: & eroare]; // Metoda de conveniență a HKHealthStore pentru a obține data nașterii direct. if (! dateOfBirth) NSLog (@ "A apărut o eroare la preluarea informațiilor de vârstă ale utilizatorului sau niciuna nu a fost stocată încă. În aplicația dvs., încercați să o gestionați cu grație."); return dateOfBirth; - (void) writeWeightSample: Greutate (CGFloat) // Fiecare cantitate constă dintr-o valoare și o unitate. HKUnit * kilogramUnit = [HKUnit gramUnitWithMetricPrefix: HKMetricPrefixKilo]; Valoarea HKQuantity * weightQuantity = [HKQuantity quantityWithUnit: kilogramUnit doubleValue: weight]; HKQuantityType * weightType = [Cantitatea de HK cantitate de tipTypeForIdentifier: HKQuantityTypeIdentifierBodyMass]; NSDate * acum = [data NSDate]; // Pentru fiecare probă, avem nevoie de un tip de probă, o cantitate și o dată. Cantitatea de probă * Proba de greutate = [Cantitatea de HK Cantitate de probăSampleWithType: weightType quantity: weightCount quantitumdate: now endDate: now]; [auto.healthStore saveObject: weightExample withCompletion: ^ (succes BOOL, eroare NSError *) if (! success) NSLog (@ "Eroare în timp ce economisiți greutate (% f) ; ]; @Sfârșit
În timp ce majoritatea codurilor legate de HealthKit sunt destul de ușor de înțeles, să trecem peste fiecare metodă pentru a ne asigura că suntem pe aceeași pagină.
sharedManager
este o metodă de clasă care creează obiectul singleton prima dată când este apelată și returnează acea instanță de fiecare dată când metoda este invocată. dispatch_once
este o funcție GCD (Grand Central Dispatch) care garantează faptul că blocul care a trecut la el este apelat o singură dată, chiar dacă sharedManager
metoda ar fi apelată din mai multe fire în același timp.requestAuthorization
este o metodă care solicită magazinului HealthKit permisiuni de citire și / sau scriere a datelor specifice de care avem nevoie. Trebuie să apelați această metodă înainte de a utiliza oricare dintre API-urile de scriere / citire HKHealthStore
clasă. În cazul în care utilizatorul neagă unele (sau toate) permisiunile, HealthKit nu vă va informa despre acest lucru. Faptul că utilizatorul nu dorește să împărtășească anumite tipuri de date este o informație în sine. Atât de mult îi pasă Apple de intimitatea.readBirthDate
metoda returnează data nașterii utilizatorului. Se întoarce zero
dacă a apărut o eroare sau dacă utilizatorul nu a introdus o dată de naștere.writeWeightSample:
salvează o măsurătoare de greutate pentru HealthKit. Am comentat codul, astfel încât să aveți o idee generală despre ce se întâmplă în această metodă. Odată ce avem HKQuantitySample
obiect, îl salvăm la HKHealthStore
exemplu, folosind saveObject: withCompletion:
metodă. Această metodă este utilizată pentru fiecare tip de date de sănătate și o vom folosi și în a doua parte a acestui tutorial atunci când salvați antrenamentele.În acest pas, ați întâlnit o serie de clase HealthKit. Puteți citi mai multe despre fiecare clasă în HealthKit Framework Reference, dar vă voi oferi un scurt rezumat al fiecărei clase.
HKHealthStore
Aceasta este fereastra dvs. pentru datele HealthKit. Apple recomandă utilizarea unei singure instanțe din această clasă în aplicația dvs. și care se potrivește perfect modelului singleton. Îl folosiți pentru a solicita utilizatorilor permisiuni, salvarea probelor și / sau antrenamentelor la HealthKit și interogarea datelor stocate. Acestea sunt doar câteva dintre sarcinile HKHealthStore
clasă.HKUnit
Exemplele din această clasă pot reprezenta fie unități de bază, cum ar fi contoare, secunde și grame, fie unități complexe create prin combinarea unităților de bază, cum ar fi km / h sau g / m³. Unitățile complexe pot fi create confortabil din șiruri de caractere.HKQuantity
Exemplele din această clasă stochează o valoare (reprezentată prin dublu) pentru o anumită unitate (reprezentată prin HKUnit
). Puteți utiliza funcția doubleValueForUnit:
metoda de conversie a valorii cantității în unitatea care a trecut. Un exemplu de astfel de conversie ar fi crearea unei cantități de distanță cu o unitate de metri și solicitarea valorii sale în picioare.HKQuantityType
HealthKit folosește tipuri de cantități pentru a crea eșantioane care stochează o valoare numerică. Se recomandă utilizarea quantityTypeForIdentifier:
când se creează tipuri de cantități. Câteva exemple de tipuri de cantități sunt distanța de ciclism, energia arsă, pașii și zborurile au urcat.HKQuantitySample
Un exemplu din această clasă reprezintă un eșantion care are un tip de cantitate (reprezentat de HKQuantityType
), o cantitate (reprezentată prin HKQuantity
) și o dată de începere și de încheiere. În cazul în care eșantionul nu se întinde pe o perioadă de timp, data de încheiere poate fi aceeași cu data de începere.Acum putem folosi GSHealthKitManager
singleton de oriunde din aplicația noastră pentru a lucra cu HealthKit.
În acest tutorial, ați învățat despre elementele de bază ale cadrului HealthKit. Te-am prezentat în cadru și am subliniat câteva dintre avertismentele pe care trebuie să le supraveghezi. Am construit, de asemenea, temelia exemplului aplicației și am implementat-o GSHealthKitManager
clasa, pe care o vom folosi pentru a interacționa cu HealthKit.
În cea de-a doua parte a acestei serii, vom continua să construim aplicația probă și să integrăm în continuare HealthKit. Puteți găsi fișierele sursă pentru acest tutorial pe GitHub.