Misurazione e strumentazione
Utilizzo dell'API Ios Healthkit per monitorare e visualizzare i dati di fitness
Table of Contents
Introduzione all’API HealthKit di Apple
In un'epoca in cui i dati personali della salute guidano intuizioni attuabili, l'API di iOS HealthKit è diventata una pietra miliare per gli sviluppatori che costruiscono applicazioni di fitness e benessere. Questo framework, introdotto da Apple con iOS 8, fornisce un repository unificato e sicuro per le informazioni sulla salute e sull'attività.
Comprendere l’architettura di HealthKit
HealthKit organizza i dati intorno a due concetti principali: tipi di dati[LT] e oggetti di dati[]. I tipi di dati definiscono la categoria di misura, come o .
Componenti chiave
- HKHealthStore[[] – Punto di ingresso centrale per tutte le operazioni HealthKit.
- HKObjectType[[] – Identificare un tipo di dati sanitari (quantità, categoria o caratteristica).
- HKSampleQuery[[] – Recupera un insieme fisso di campioni memorizzati.
- HKStatisticsQuery[[] – Computo dei valori aggregati (somma, media, min, max, ecc.) per un intervallo di tempo.
- HKObserverQuery[[] – Monitori per le modifiche ai tipi di dati specificati, consentendo aggiornamenti di sfondo.
Impostazione delle autorizzazioni – Richiesta di accesso
Prima di ogni scambio di dati, la tua app deve richiedere il permesso usando []. È necessario dichiarare sia le autorizzazioni di lettura e scrittura nel vostro [] con i [] e ]] tasti. Per il monitoraggio del fitness, in genere leggere il conteggio passo, l'energia attiva, la frequenza cardiaca e potenzialmente scrivere allenamenti.
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
}
}
Se l'utente declina, evitare di bloccare la funzionalità; invece, spiega perché i dati sono necessari e forniscono un'alternativa (ad esempio, l'ingresso manuale). Ricorda che le autorizzazioni possono essere modificate nella scheda Fonti dell'app Salute.
Accostamento dei dati di fitness
HealthKit offre diversi tipi di query per recuperare i dati in modo efficiente. Il più comune per le applicazioni di fitness sono domande di campioni e domande statistiche.
HKSampleQuery – Recuperare dati crudi
Usa quando hai bisogno di singoli record, come le ultime 100 letture di frequenza cardiaca o i registri di gradino di oggi. Specifica un predicato per filtrare per data, sorgente o valore. Per prestazioni, limita sempre il numero di risultati restituiti.
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)
HKStatisticsQuery – Dati aggregati
Per i totali, le medie o i massimi in un determinato periodo (ad esempio, il conteggio giornaliero delle fasi), utilizzare . Questo è molto più efficiente di sommare i singoli campioni.
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)
HKStatisticsCollectionQuery – Dati di serie temporali
Per visualizzare un grafico di passi al giorno per la settimana passata, utilizzare [. E 'basato statistiche per ogni giorno tra una data di inizio e fine, rendendolo ideale per le tendenze.
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)
Visualizzazione di dati di fitness
I numeri grezzi sono privi di significato senza una chiara visualizzazione. Un'interfaccia utente ben progettata trasforma i dati HealthKit in insight motivazionali.
- Carte riassuntive:[] Mostra il numero di gradino di oggi, i minuti attivi e la tendenza della frequenza cardiaca in un cruscotto compatto.
- Cambi:[[] Usare i grafici della linea o della barra per visualizzare i passi settimanali, l'energia attiva mensile o le zone di frequenza cardiaca.
- Anelli di coda:[] Gli anelli di attività classici di Apple possono essere emulati per visualizzare energia, esercizio e ore di stand.
- Riepilogo di lavoro:[ Durata attuale, frequenza cardiaca media, distanza e calorie bruciate per ogni allenamento registrato.
Esempio: costruire un conto passo Dashboard
Combina la query statistica sopra con SwiftUI per creare un contatore passo in live-updating:
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
}
}
Aggiornamenti in tempo reale con HKObserverQuery
Per mantenere la corrente del cruscotto senza aggiornamento manuale, impostare un [. Il sistema notifica la tua app quando nuovi dati vengono salvati a HealthKit (anche mentre l'applicazione è sottofondo, se si registra per la consegna di sfondo).
let observerQuery = HKObserverQuery(sampleType: stepType, predicate: nil) { query, completionHandler, error in
DispatchQueue.main.async { self.fetchTodaySteps() }
completionHandler()
}
healthStore.execute(observerQuery)
Per gli aggiornamenti di sfondo, è necessario anche chiamare . Nota che iOS accelera i callback di sfondo per preservare la batteria; utilizzare questo in modo sparingly e sempre gestire il gestore di completamento.
Migliori Pratiche per la privacy e la sicurezza
I dati sulla salute sono sensibili. Apple applica regole severe e non conformi può portare a rifiuto di App Store.
- Minimali richieste di dati:[[] Solo chiedere i tipi di dati che la tua app utilizza effettivamente. Evitare di chiedere " record di salute" se hai solo bisogno di conta passo.
- Clear spiegazioni stringhe:[] La descrizione di utilizzo in Info.plist dovrebbe essere specifica, ad esempio, “Questa applicazione legge il tuo numero di passaggi per mostrare la tua attività quotidiana.”
- Non condividere dati di HealthKit grezzi off-device[] senza esplicito consenso dell'utente. Se si sincronizza con il backend, anonimizzare e crittografare i dati.
- Modifiche di autorizzazione di rispetto:[] Osservare quando l'utente revoca le autorizzazioni attraverso []] o controllando lo stato di autorizzazione prima di ogni query.
- Handle errori con grazia:[[] Le query HealthKit potrebbero non funzionare a causa di autorizzazioni, mancanza di dati o errori di database.
Integrazione con Apple Watch e altre fonti
HealthKit aggrega automaticamente i dati da Apple Watch, applicazioni di terze parti e voci manuali. La tua app iOS non ha bisogno di distinguere la fonte a meno che non si desidera specificamente filtrare per fonte. Per le applicazioni di allenamento, prendere in considerazione la scrittura oggetti a HealthKit. Quando un utente inizia un allenamento su Apple Watch, il sistema può registrare automaticamente metriche; la tua app iOS compagni può leggere quelle successive.
Per scrivere dati di allenamento:
let workout = HKWorkout(activityType: .running, start: workoutStart, end: workoutEnd, duration: duration, totalEnergyBurned: energy, totalDistance: distance, metadata: nil)
healthStore.save(workout) { success, error in
// Handle
}
È inoltre possibile aggiungere campioni associati (ad esempio, frequenza cardiaca, percorso) all'allenamento utilizzando e .
Pitfalls comune e come evitare di loro
- I dati di emissione sono sempre disponibili:[] Un nuovo utente potrebbe non avere dati HealthKit.Progettare l'interfaccia utente per mostrare i segnaposto o incoraggiare l'utente a iniziare a tracciare tramite l'app Health o Apple Watch.
- Richiedere dati troppo in una volta:[ Grandi query (ad esempio, tutti i campioni per l'anno passato) possono essere lenti e crash sulla memoria.
- Ignorando fusi orari:[ I timestamps HealthKit sono in UTC. Quando si raggruppa di giorno, si convertono nella zona di ora locale dell'utente per evitare disallineamento.
- Bloccando il filo principale:[ Le query HealthKit sono asincroni ma i loro gestori di completamento non possono essere eseguiti sul filo principale.
- Permettere di controllare la disponibilità dei dati sulla salute:[ HealthKit non è disponibile su iPad e iPod touch.
Ampliamento con i record di salute e i dati clinici
Per le applicazioni focalizzate sulla salute clinica, HealthKit supporta anche []Health Records[ (tramite FHIR). Con il permesso dell'utente, la tua app può accedere alle immunizzazioni, ai risultati del laboratorio, ai farmaci e alle condizioni.
Conclusioni
Grazie alla comprensione del suo modello di permesso, i tipi di query e le migliori pratiche, è possibile costruire un'applicazione che si integra perfettamente con l'ecosistema di salute dell'utente. Inizia con semplici query passo e frequenza cardiaca, quindi incorporare gradualmente funzionalità più avanzate come aggiornamenti di sfondo, la connettività di orologio e record clinici. Il risultato è uno strumento potente che non solo informa gli utenti sulla loro salute, ma anche raggiungere obiettivi di fitness.
Per ulteriori informazioni, consultare il sito ufficiale ]Apple HealthKit Documentation, ]HealthKit Human Interface Guidelines, e risorse della comunità come Ray Wenderlich’s HealthKit Tutorial] per esempi di codice pratici.