Вимірювання та приладобудування
Використання API Ios Healthkit для відстеження та відображення даних фітнесу
Table of Contents
Вступ до API-клієнта Apple HealthKit
У епоху, де особисті дані про здоров'я приводять до дії інсайтів, API iOS HealthKit стала кутовимstone для розробників, що будують фітнес і оздоровчі програми. Ця рамка, введена Apple з iOS 8, забезпечує єдиний, безпечний репозиторій для здоров'я та інформації про активність. За допомогою інтеграції HealthKit, ваш додаток може прочитати і писати на зберігання даних додатків охорони здоров'я, що дозволяє користувачам бачити консолідований вигляд їх кроків, частоти серцевих скорочень, аналіз сну, дієтичних журналів і навіть клінічних записів. Ця стаття досліджує, як важети API HealthKit для відстеження і відображення даних фітнесу ефективно, покриття дозволів, запитів, запитів на запити, стратегія запитів, поліпшення запитів, підвищення кваліфікації, поліпшення продуктивності даних, поліпшення продуктивності даних, і обробки даних, поліпшення продуктивності даних, і обробки даних, і обробки даних, і обробки даних, і обробки даних, поліпшення продуктивності та обробки даних, і обробки даних.
Розуміння архітектури HealthKit
Зручний доступ до системи охорони здоров'я та безпеки, що дозволяється використовувати файли, які містяться в одному файлі, наприклад та . Типи даних визначають категорію вимірювання, таких як або . Об'єкти даних є фактичними записами, які можуть бути , які мають бути заповнені тільки (єдиний вимір або захід),
Основні компоненти
- HKHealthStore – Центральний пункт входу для всіх операцій HealthKit.
- HKObjectType – Визначає тип даних здоров’я (кількість, категорія, характерна).
- HKSampleQuery – Випробуває фіксований набір збережених зразків.
- HKStatisticsQuery – Композиції сукупні значення (сум, середній, мінімальний, макс і т.д.) за інтервалом часу.
- HKObserverQuery – монітори для змін у визначених типах даних, що дозволяють оновлення фону.
Налаштування протоколів - Доступ до запиту
Перед будь-яким обміном даними, ваш додаток повинен запитувати дозвіл на використання . Ви повинні вказати як читання та запис дозволів у вашому з та ключі. Для відстеження фітнесу, ви зазвичай читаєте крок, активна енергія, частота серцевих скорочень та потенційно записують тренування.
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
}
}
Завжди керуйте пошуком, щоб зробити замовлення, щоб зробити його більш привабливими. Якщо користувач не занепад, не використовуйте функцію блокування, а не поясніть, чому дані потрібні і надати альтернативну (наприклад, ручну запис). Пам'ятайте, що дозвіл можна змінити пізніше в вкладці "Збереження".
Запитання про фітнес
HealthKit пропонує кілька типів запитів для отримання даних, які ефективно фіксують дані. Найпоширенішим для додатків для фітнесу є питання про вибірки та статистичні запити.
HKSampleQuery – Отримання вихідних даних
Використовуйте , коли вам потрібна фізична записка, як останні 100 читання частоти серцевих скорочень або сьогоднішніх блоґів. Вкажіть предикцію для фільтрування за датою, джерелом або значенням. Для виконання завжди обмежуйте кількість результатів, які повернулися.
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 – сукупні дані
Для всього, середні, або максимуми за конкретний період (наприклад, щоденний ряд кроків), скористайтеся . Це набагато ефективніше, ніж підсумування окремих зразків.
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)
ХКстатистикаВибірКвартири - Time‐Series Data
Для відображення діаграми кроків на день минулого тижня використовуйте . Вона бере участь у статистичній статистиці кожного дня між початком та датою закінчення, що робить його ідеальним для тенденцій.
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)
Відображення даних фітнесу
Сировина неспроможна без чіткої візуалізації. Добре розроблена UI трансформує дані HealthKit у мотиваційні дослідження. Розглянемо наступні підходи:
- Сумерні картки: Показати сьогоднішні рядки, активні хвилини, і тренд частоти серцевих скорочень у компактній панелі.
- Charts:] Використання діаграми рядків або барів для відображення щотижневих кроків, щомісячної активної енергії або зон частоти серцевих скорочень. Бібліотеки, як Swift Charts] (iOS 16+) або Charts (DGCharts) інтегруються безшовно.
- Галицькі кільця: Класичні кільця активності Apple можна скомпільувати для візуалізації енергії, вправ і годин очікування.
- Тураут Сумпери: Весь час, середній частота серця, відстань і калорій, які спалюються для кожного зложеного тренування.
Приклад: Будівництво кроку графа Дяшборд
Поєднайте статистичні запити вище з SwiftUI для створення живої стійки кроку:
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
}
}
Оновлення в режимі реального часу з HKObserverQuery
Щоб зберегти свій DVD-картковий струм без ручного оновлення, встановіть . Система повідомляє вашу програму, коли нові дані зберігаються в HealthKit (навіть, коли додаток фонується, якщо ви реєструєтесь на фонову доставку).
let observerQuery = HKObserverQuery(sampleType: stepType, predicate: nil) { query, completionHandler, error in
DispatchQueue.main.async { self.fetchTodaySteps() }
completionHandler()
}
healthStore.execute(observerQuery)
Для фонових оновлень, ви також можете зателефонувати . Зверніть увагу, що iOS дросельний фоновий зворотний дзвінок для збереження акумулятора; Використовуйте це щадно і завжди ручка завершення.
Найкращі практики для конфіденційності та безпеки
Дані про здоров’я чутливі. Apple дотримується суворих правил, і не може призвести до відмови від App Store.
- Minimal запитів даних: Тільки запитайте типи даних, які використовують додаток. Уникайте запитати "здійснити записи", якщо вам потрібно лише покроковий розрахунок.
- Записи пояснень: Опис використання в Info.plist повинен бути специфічним, наприклад, "Цей додаток читає ваш кроковий рядок, щоб показати вашу повсякденну активність".
- Never share raw HealthKit data off-device без явної згоди користувача. Якщо синхронізація на вашу заднью, анонімізуйте та зашифруйте дані.
- Респект змін авторизації: Переглядайте, коли користувач відкликає дозвіл через або перевіривши статус авторизації перед кожним запитом.
- Погляд помилок граціозно: Запити HealthKit можуть не в силу авторизації, відсутності даних або помилок бази даних. Завжди показати зручний для користувача повідомлення.
Інтеграція з Apple Watch та іншими джерелами
HealthKit автоматично скріплює дані з Apple Watch, сторонніх додатків та ручних записів. Ваш додаток iOS не потрібно відрізняти джерело, якщо ви хочете фільтрувати за допомогою джерела. Для програм тренування вкажіть об'єкти до HealthKit. Коли користувач починає тренування на Apple Watch, система може автоматично записувати метрики; ваш супутник iOS додаток може читати далі.
Для запису даних тренування:
let workout = HKWorkout(activityType: .running, start: workoutStart, end: workoutEnd, duration: duration, totalEnergyBurned: energy, totalDistance: distance, metadata: nil)
healthStore.save(workout) { success, error in
// Handle
}
Ви також можете додати пов'язані зразки (наприклад, частота серця, маршрут) до тренування за допомогою і .
Загальні Питви та Як уникнути
- Для даних завжди доступна: Новий користувач може мати дані HealthKit. Дизайн вашого UI для відображення зацікавлених сторін або заохочувати користувача для відстеження через додаток для здоров'я або Apple Watch.
- Подивитися дуже багато даних одночасно: Великі запити (наприклад, всі зразки за минулий рік) можуть бути повільними і збитими на пам'ять. Використовуйте дати індексує і патчують з лімітами.
- Визначає часові пояси: HealthKit timestamps are in UTC. При поєднанні в день, перетворюйте в локальну часову зону користувача, щоб уникнути знезараження.
- Blocking the main Thread: HealthKit запитів є асинхронним, але їх обробники можуть не працювати на головній нитки. Dispatch UI оновлення to .
- Попередня реєстрація на наявність даних для здоров’я: HealthKit недоступна на IPad і iPod touch. Завжди виклику перед будь-яким взаємодією.
Розширювання записів та клінічних даних
Для додатків, орієнтованих на клінічне здоров'я, HealthKit також підтримує Описи охорони здоров'я (через FHIR). З дозволу користувача, ваш додаток може отримати доступ до імунізації, результатів лабораторних досліджень, ліків та умов. Це відкриває можливості для медичних трекерів, алергічних перевірок, або хронічного управління станом. Однак ці типи даних вимагають додаткового огляду для охорони здоров'я записів, що задовольнить Apple.
Висновок
API iOS HealthKit пропонує надійний, конфіденційність є орієнтованим на створення бази для відстеження та відображення даних фітнесу. Розуміння його моделі дозволу, типи запитів та кращих практик, ви можете побудувати додаток, який безшовно інтегрується з екосистемою здоров'я користувача. Почати з простих кроків і частотних запитів, потім поступово включити більш розширені функції, такі як оновлення фону, дивитися підключення та клінічні записи. Результатом є потужний інструмент, який не тільки інформує користувачів про своє здоров'я, але також мотивує їх досягнення своїх цілей фітнесу.
Для подальшого читання зверніться до офіційної Apple HealthKit Документація, HealthKit Human Analysis , та ресурсів спільноти, таких як Ray Wenderlich's HealthKit Tutorial] для прикладів коду рукоятки.