Noțiuni de bază cu HealthKit Partea 1

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

De ce ar trebui să mă îngrijesc de HealthKit?

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.

Ce vei învăța?

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

Ce ar trebui sa stii

Următoarea listă conține câteva informații de bază despre HealthKit pe care ar trebui să le cunoașteți:

  • Cadrul HealthKit este disponibil de la iOS 8. Rețineți că este disponibil numai pe iPhone, nu pe iPad.
  • Apple are seriozitate cu privire la confidențialitate și de aceea trebuie să solicitați explicit accesul la citirea și / sau scrierea la HealthKit pentru fiecare tip de date de care aveți nevoie. Utilizatorul are opțiunea de a permite accesul pentru anumite tipuri și de a le interzice altora.
  • Cadrul HealthKit folosește în mare măsură subclasarea.
  • Există două tipuri principale de date, caracteristici și eșantioane. Caracteristicile, cum ar fi data nașterii sau tipul de sânge al utilizatorului, de obicei nu se schimbă. Mostra reprezintă datele la un anumit moment în timp.
  • Cantitate probe sunt cele mai comune tipuri de date. Acestea includ înălțimea și greutatea utilizatorului, pașii făcuți, temperatura utilizatorului, rata pulsului etc..
  • antrenamente, care aparțin categoriei eșantioanelor, sunt destinate în mod specific reprezentării rutelor, plimbărilor, plimbărilor etc..

Pentru mai multe informații despre cadrul HealthKit, vizitați HealthKit Framework Reference.

Înainte de a începe

Ș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.

  • Magazinul HealthKit este criptat când telefonul utilizatorului este blocat. Aceasta înseamnă că nu veți putea să citiți de la acesta atunci când aplicația se află în fundal. Scrierea către HealthKit, totuși, funcționează chiar și când telefonul este blocat.
  • Trebuie să explicați în descrierea App Store și în aplicația dvs. cum va utiliza aplicația datele obținute de la HealthKit. În caz contrar, este posibil să se refuze aplicația dvs..
  • Există o nouă secțiune în Ghidul de revizuire App Store care acoperă HealthKit. Trebuie să citiți cu siguranță acest lucru înainte de a vă decide dacă să adăugați asistență pentru HealthKit sau nu.
  • Odată ce aplicația dvs. se integrează cu HealthKit, trebuie să furnizați o politică de confidențialitate pentru aceasta. Apple chiar recomandă unele documente care să specifice cum ar trebui să arate politicile de confidențialitate legate de sănătate. Este important ca politica de confidențialitate să îi spună utilizării modul în care aplicația tratează datele dvs..

Acum că am scăpat de asta, să începem cu tutorialul.

Proiectul

Vom construi o aplicație simplă care se integrează cu HealthKit și explică câteva dintre conceptele de bază ale cadrului. În special, vom:

  • creați un nou proiect de la zero și activați HealthKit
  • cereți permisiunea utilizatorului să acceseze datele referitoare la sănătate
  • citiți data de naștere a utilizatorului
  • scrieți un eșantion de greutate pentru HealthKit
  • scrieți un antrenament la HealthKit

1. Configurarea proiectului

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.

2. Activarea HealthKit

Î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.


3. Crearea interfeței utilizator

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:

4. Crearea Managerului HealthKit

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.

Concluzie

Î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.

Cod