Table of Contents
Introducere în Apple
Într-o eră în care datele de sănătate personală conduce la perspective acţionale, iOS HealthKit API a devenit o piatră de temelie pentru dezvoltatorii care construiesc aplicaţii de fitness şi wellness. Acest cadru, introdus de Apple cu iOS 8, oferă un depozit unificat, sigur pentru informaţii de sănătate şi activitate. Prin integrarea HealthKit, aplicaţia dumneavoastră poate citi şi scrie la magazinul de date de aplicaţii de sănătate, permiţând utilizatorilor să vadă o imagine consolidată a paşilor lor, rata inimii, analiza somnului, jurnalele dietetice şi chiar înregistrările clinice. Acest articol explorează modul de a pârghia HealthKit API pentru a urmări şi a a afişa eficient datele de fitness, acoperind fluxurile de lucru permisive, strategiile de interogare, vizualizarea datelor şi cele mai bune practici de producţie.
Înțelegerea arhitecturii HealthKit
HealthKit organizează date în jurul a două concepte primare: tipuri de date[ și obiecte de date. Tipuri de date definesc categoria de măsură, cum ar fi sau . Obiectele de date sunt înregistrările reale, care pot fi epruvete] (o singură măsurătoare sau eveniment), corelații (grupuri de eșantioane conexe) sau lucrări [. Magazinul de servicii de sănătate este criptat pe dispozitiv și sincronizat în iCloud, dar numai atunci când utilizatorul permite explicit sincronizarea sănătății. Fiecare cerere de acces trebuie autorizată de către utilizator prin intermediul unui dialog de sistem, asigurând respectarea confidențialității.
Componente cheie
- HKHealthStore
- HKObjectType
- HKSAmpleQuery
- HKNYQuery
- HKObserverQuery
Setarea permisiunilor
Înainte de orice schimb de date, aplicația trebuie să solicite permisiunea de a utiliza . Trebuie să declarați atât permisiunile de citire, cât și cele de scris în cu tastele și . Pentru urmărirea fitness, citiți de obicei numărul de trepte, energia activă, ritmul cardiac și potențial scrie antrenamente.
import HealthKit
let healthStore = HKHealthStore()
func requestHealthPermissions() {
guard HKHealthStore.isHealthDataAvailable() else { return }
let readTypes: Set<HKObjectType> = [
HKObjectType.quantityType(forIdentifier: .stepCount)!,
HKObjectType.quantityType(forIdentifier: .heartRate)!,
HKObjectType.quantityType(forIdentifier: .activeEnergyBurned)!,
HKObjectType.categoryType(forIdentifier: .sleepAnalysis)!
]
let writeTypes: Set<HKSampleType> = [
HKObjectType.workoutType()
]
healthStore.requestAuthorization(toShare: writeTypes, read: readTypes) { success, error in
// Handle response
}
}
Întotdeauna se ocupe de apelul de autorizare cu grație. În cazul în care utilizatorul declină, evita funcționalitatea de blocare; în schimb, explicați de ce datele sunt necesare și să ofere o alternativă (de exemplu, intrarea manuală). Amintiți-vă că permisiunile pot fi modificate mai târziu în aplicația de sănătate .
Date privind adecvarea
HealthKit oferă mai multe tipuri de interogări pentru a aduce date eficient. Cele mai frecvente pentru aplicații de fitness sunt întrebări de probă și întrebări statistice.
HKSAmpleQuery
Utilizați atunci când aveți nevoie de înregistrări individuale, cum ar fi ultimele 100 de citiri ale ritmului cardiac sau astăzi . A se specifica un predicate pentru a filtra după data, sursa, sau valoare. Pentru performanță, limita întotdeauna numărul de rezultate returnate.
let stepType = HKQuantityType.quantityType(forIdentifier: .stepCount)!
let startDate = Calendar.current.startOfDay(for: Date())
let predicate = HKQuery.predicateForSamples(withStart: startDate, end: Date(), options: .strictStartDate)
let query = HKSampleQuery(sampleType: stepType, predicate: predicate, limit: HKObjectQueryNoLimit, sortDescriptors: nil) { query, samples, error in
guard let samples = samples as? [HKQuantitySample] else { return }
// Process samples
}
healthStore.execute(query)
HK IONQuery
Pentru totaluri, medii sau maxime pe o perioadă specifică (de exemplu, număr de trepte zilnice), utilizați . Acest lucru este mult mai eficient decât sumarea eșantioanelor individuale.
let statisticsQuery = HKStatisticsQuery(quantityType: stepType, quantitySamplePredicate: predicate, options: .cumulativeSum) { query, result, error in
let sum = result?.sumQuantity()?.doubleValue(for: HKUnit.count()) ?? 0
// Update UI with total steps
}
healthStore.execute(statisticsQuery)
HK
Pentru a afișa o hartă de pași pe zi pentru săptămâna trecută, utilizați . Ea loturi de statistici pentru fiecare zi între o dată de început și sfârșitul, ceea ce face ideal pentru tendințele.
let now = Date()
let sevenDaysAgo = Calendar.current.date(byAdding: .day, value: -7, to: now)!
let anchorDate = Calendar.current.startOfDay(for: now)
let daily = DateComponents(day: 1)
let collectionQuery = HKStatisticsCollectionQuery(quantityType: stepType, quantitySamplePredicate: nil, options: .cumulativeSum, anchorDate: anchorDate, intervalComponents: daily)
collectionQuery.initialResultsHandler = { query, results, error in
results?.enumerateStatistics(from: sevenDaysAgo, to: now) { statistics, stop in
let steps = statistics.sumQuantity()?.doubleValue(for: HKUnit.count()) ?? 0
// Append steps for statistics.startDate
}
}
healthStore.execute(collectionQuery)
Afișează date de adecvare
Numerele prime sunt lipsite de sens fără vizualizare clară. Un UI bine conceput transformă datele HealthKit în perspective motivaționale. Luați în considerare următoarele abordări:
- Carduri sumare: Arată astăzi numărul de pași, minute active și tendința ritmului cardiac într-un tablou compact de bord.
- Dispozitive:[ Utilizați diagrame de linie sau bare pentru a afișa pașii săptămânali, energia activă lunară sau zonele de ritm cardiac. Biblioteci precum Grafice de pivotare] (iOS 16+) sau Charts (DGCharts) se integrează fără probleme.
- Inelele de obiectiv: Inelele de activitate clasice Apple pot fi emulate pentru a vizualiza energia, exercitiile fizice si orele de stat.
- Durata actuală, ritmul cardiac mediu, distanţa şi caloriile arse pentru fiecare antrenament înregistrat.
Exemplu: Construirea unui Step Count Dashboard
Combinați interogarea statistică de mai sus cu SwiftUI pentru a crea un contor de pas live-updatare:
struct StepCardView: View {
@State private var steps: Double = 0
var body: some View {
VStack {
Text("Steps")
.font(.headline)
Text("\(Int(steps))")
.font(.largeTitle)
.bold()
}
.onAppear { fetchTodaySteps() }
}
func fetchTodaySteps() {
// Use HKStatisticsQuery as shown earlier
}
}
Actualizări în timp real cu HKObserverQuery
Pentru a păstra curentul tabloului de bord fără reîmprospătare manuală, setați un . Sistemul notifică aplicația dumneavoastră atunci când datele noi sunt salvate în HealthKit (chiar și în timp ce aplicația este fundal, dacă vă înregistrați pentru livrarea de fundal).
let observerQuery = HKObserverQuery(sampleType: stepType, predicate: nil) { query, completionHandler, error in
DispatchQueue.main.async { self.fetchTodaySteps() }
completionHandler()
}
healthStore.execute(observerQuery)
Pentru actualizările de fundal, trebuie să apelați, de asemenea . Rețineți că iOS accelerează apelurile de fundal pentru a păstra bateria; utilizați acest mâner cu grijă și mânuiți întotdeauna handler-ul de finisare.
Cele mai bune practici în materie de confidențialitate și securitate
Datele de sănătate este sensibil. Apple aplică reguli stricte, și nerespectarea poate duce la respingerea App Store.
- Cereri de date minime: Solicitați doar tipurile de date pe care aplicația dumneavoastră le utilizează efectiv. Evitați să cereți înregistrări de sănătate
- Sfârșituri de explicații clare: Descrierea utilizării în Info.plust ar trebui să fie specifică, de exemplu,
- Nu partajați niciodată datele brute HealthKit off-device fără consimțământul explicit al utilizatorului.Dacă vă sincronizați cu backend-ul, anonimizați și criptați datele.
- Respectează modificările autorizaţiei: Observaţi momentul în care utilizatorul revocă permisiunile prin sau prin verificarea statutului autorizaţiei înainte de fiecare cerere.
- Erorile de mână cu graţie:Întrebările privind sănătateaKit pot eşua din cauza autorizaţiei, lipsei datelor sau a erorilor de baze de date.Arată întotdeauna un mesaj prietenos cu utilizatorul.
Integrarea cu Apple Watch și alte surse
HealthKit agregate automat date de la Apple Watch, aplicații terțe părți, și intrări manuale. Aplicația ta iOS nu trebuie să facă distincție între sursă, cu excepția cazului în care doriți în mod specific să filtrați după sursă. Pentru aplicații de antrenament, ia în considerare scrierea obiecte la HealthKit. Când un utilizator începe un antrenament pe Apple Watch, sistemul poate înregistra automat metrics; aplicația ta iOS companion poate citi cele mai târziu.
Pentru a scrie date de antrenament:
let workout = HKWorkout(activityType: .running, start: workoutStart, end: workoutEnd, duration: duration, totalEnergyBurned: energy, totalDistance: distance, metadata: nil)
healthStore.save(workout) { success, error in
// Handle
}
De asemenea, puteți adăuga eșantioane asociate (de exemplu, ritmul cardiac, calea) la antrenament folosind și .
Capturi comune şi cum să le evităm
- Presupunând că datele sunt întotdeauna disponibile: Un utilizator nou poate să nu aibă date HealthKit. Proiectați UI pentru a arăta deținătorii de locuri sau încurajați utilizatorul să înceapă urmărirea prin aplicația Health sau Apple Watch.
- Cautarea de prea multe date dintr-o dată: Întrebări mari (de exemplu, toate probele din ultimul an) pot fi lente și se prăbușesc pe memorie. Utilizați predicatele de date și paginați cu limite.
- Zonele temporale de diagnosticare:Timpurile de timp pentru sănătateKit sunt în UTC. Când se grupează ziua, convertiți în zona orară locală a utilizatorului pentru a evita alinierea greșită.
- Blocarea firului principal: Întrebările privind sănătateaKit sunt asincrone, dar manipulatorii lor de finalizare nu pot rula pe fir principal. Dispecerați actualizări UI la .
- Uitând să verificați disponibilitatea datelor de sănătate: SănătateKit nu este disponibil pe iPad și iPod atinge. Apelați întotdeauna înainte de orice interacțiune.
Extinderea cu înregistrări de sănătate și date clinice
Pentru aplicații axate pe sănătatea clinică, HealthKit suportă, de asemenea, Recorduri de sănătate (prin FHIR). Cu permisiunea utilizatorului, aplicația dumneavoastră poate accesa imunizări, rezultate de laborator, medicamente, și condiții. Acest lucru deschide posibilitățile pentru trackeri medicamente, checkers alergie, sau managementul stării cronice. Totuși, aceste tipuri de date necesită o revizuire suplimentară pentru dreptul la înregistrările medicale de la Apple.
Concluzie
IOS HealthKit API oferă o bază solidă, axată pe intimitate pentru urmărirea și afișarea datelor de fitness. Prin înțelegerea modelului de permisiune, tipurile de interogare și cele mai bune practici, puteți construi o aplicație care se integrează fără probleme cu ecosistemul de sănătate al utilizatorului. Începeți cu întrebări simple și cu întrebări privind ritmul cardiac, apoi să încorporați treptat caracteristici mai avansate, cum ar fi actualizările de fundal, conectivitatea la ceas și înregistrările clinice. Rezultatul este un instrument puternic care nu numai informează utilizatorii despre sănătatea lor, dar îi motivează să-și atingă obiectivele de fitness.
Pentru o citire ulterioară, consultați oficial Apple HealthKit Documentation, HealthKit Human Interface Guidelines, și resurse comunitare precum Ray Wenderlichhs HealthKit Tutorial pentru exemple de cod hands-on.