Table of Contents
معرفی API HealthKit اپل
در عصری که داده های سلامت شخصی بینش عملی را هدایت می کند، API HealthKit تبدیل به یک سنگ بنای برای توسعه دهندگان ساخت تناسب اندام و برنامه های بهداشتی شده است.این چارچوب، معرفی شده توسط اپل با iOS 8، یک مخزن یکپارچه و امن برای اطلاعات سلامت و فعالیت خود را فراهم می کند.با ادغام HealthKit، برنامه شما می تواند از طریق و نوشتن به فروشگاه داده های برنامه سلامت بخواند و به کاربران اجازه می دهد تا بهترین روش های پردازش قلب، حتی تجزیه و تجزیه و تحلیل پردازش اطلاعات بالینی را بررسی کنند.
آشنایی با معماری HealthKit
سلامت و مدیریت اطلاعات در مورد دو مفهوم اولیه: انواع داده ها و اشیاء داده را سازماندهی می کند انواع داده ها، بخش اندازه گیری حریم خصوصی را تعریف می کنند، مانند یا اشیاء داده ها سوابق واقعی هستند که می توانند [FLT] [F] [F] را به طور واضح تنظیم کنند (F6LT).
اجزای کلیدی
- HKHealthStore - نقطه ورود مرکزی برای تمام عملیات HealthKit.
- HKObjectType [FLT 1] - یک نوع از داده های بهداشتی (شکل، دسته یا ویژگی) را شناسایی می کند.
- [[۱] [۱۰] [۱۰] [۱۰] [۱۰] [۱]] [۱]] [۱]] [۱] [۱]] [۱]] [۱]] [۱] [۱]] [۱]] [۱]] [۱] [۱]] [۱] [۱] [۱]] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱]] [۱]]]] [۱]]] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱]] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۳] [۱] [۱] [۱]] [۱] [۱] [۱] [۱] [۱
- HKStatistics [FLT 1] - تکمیل مقادیر جمع آوری شده (sum, Average, Min, max, and غیره) در طول یک بازه زمانی.
- [FLT 1 ] - مانیتور برای تغییرات در انواع داده های مشخص، قادر به به به روز رسانی پس زمینه.
گزینه Up License – Requesting Access
قبل از هر گونه تبادل داده، برنامه شما باید مجوز استفاده از را درخواست کند، شما باید هر دو مجوز خواندن و نوشتن را در با و کلید برای ردیابی تناسب اندام، شما به طور معمول خواندن گام، انرژی فعال، ضربان قلب، و به طور بالقوه تمرینات نوشتن.
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
}
}
همیشه با فراخوان مجوز به طور محترمانه برخورد کنید، اگر کاربر کاهش یابد، از قابلیت های مسدود کننده اجتناب کنید؛ به جای آن توضیح دهید که چرا داده ها مورد نیاز است و جایگزین دیگری را ارائه می دهد (به عنوان مثال، ورود دستی).
Query Fitness Data
HealthKit چندین نوع پرس و جو را برای به دست آوردن داده ها به طور موثر ارائه می دهد. رایج ترین آنها برای برنامه های تناسب اندام، پرس و جو نمونه و آمار پرس و جو هستند.
HKSampleQuery - Retrieving RAW Data
از استفاده کنید هنگامی که شما نیاز به سوابق فردی دارید، مانند 100 ضربان قلب گذشته یا logs گام امروز، یک پیش بینی برای فیلتر کردن در تاریخ، منبع یا ارزش برای عملکرد، همیشه تعداد نتایج بازگشت.
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 - داده های Aggregated
برای کل، متوسط یا حداکثر در یک دوره خاص (به عنوان مثال، شمارش روزانه) استفاده از بسیار کارآمد تر از جمع آوری نمونه های فردی است.
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 - داده های زمان سری
برای نمایش یک نمودار از مراحل در روز برای هفته گذشته، از استفاده کنید، این آمار برای هر روز بین یک شروع و تاریخ پایان، آن را ایده آل برای روند.
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 را به بینش های انگیزشی تبدیل می کند.
- کارت های فوق العاده: نشان دادن شمارش گام امروز، دقیقه فعال و روند ضربان قلب در داشبورد جمع و جور.
- از نمودار های خط یا نوار برای نمایش گام های هفتگی، انرژی فعال ماهانه، و یا مناطق ضربان قلب استفاده کنید. نمودارهای سود آور (iOS 16 + / 4 / 4 [FLT] [FLT5:5 [DGC] یکپارچه سازی یکپارچه.
- حلقه های متحرک: حلقه های فعالیت کلاسیک اپل می توانند برای تجسم انرژی، ورزش و ایستادن ساعت ها شبیه سازی شوند.
- کارگردان سومئز: مدت زمان حال، متوسط ضربان قلب، فاصله و کالری سوخته برای هر تمرین ثبت شده است.
مثال: ایجاد یک داشبورد شمارش مرحله
ترکیب پرس و جو آمار بالا با 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
}
}
دانلود بازی Real-Time Updates with HKObserverQuery
برای نگه داشتن داشبورد فعلی بدون تازه سازی دستی، یک برنامه (FLT:14) را تنظیم کنید، سیستم برنامه شما را زمانی که داده های جدید برای HealthKit ذخیره می شوند، تأیید نمی کند (حتی در حالی که برنامه پس زمینه ای است، اگر برای تحویل پس زمینه ثبت نام کنید).
let observerQuery = HKObserverQuery(sampleType: stepType, predicate: nil) { query, completionHandler, error in
DispatchQueue.main.async { self.fetchTodaySteps() }
completionHandler()
}
healthStore.execute(observerQuery)
برای به روز رسانی پس زمینه، شما همچنین باید با نام (FLT:16) توجه کنید که iOS برای حفظ باتری، از این باتری استفاده کنید و همیشه به طور خلاصه مدیریت کنید.
بهترین روش ها برای حفظ حریم خصوصی و امنیت
داده های بهداشتی حساس هستند، اپل قوانین سختگیرانه ای را اجرا می کند و عدم رعایت آن می تواند منجر به رد فروشگاه App شود.
- ] درخواست داده های عددی: فقط درخواست انواع داده های برنامه خود را در واقع استفاده کنید، اجتناب از درخواست " سوابق بهداشتی" اگر شما فقط نیاز به شمارش گام.
- رشته های توضیح واضح: شرح استفاده در Info.plist باید خاص باشد، به عنوان مثال، "این برنامه شمارش گام خود را برای نشان دادن فعالیت روزانه خود را می خواند."
- هرگز داده های HealthKit خام را از دستگاه خارج نکنید بدون رضایت کاربر صریح، اگر همگام سازی با داده های backend، ناشناس و رمزگذاری شده خود را.
- (تغییرمسیر از این دو را به صورت زیر مشاهده کنید: (۱)) و یا به صورت مستقیم به صورت زیر به صورت زیر مشاهده نمایید.
- [FLT: 1 ] [FLT: 1 ] پرس و جوهای HealthKit ممکن است به دلیل مجوز، عدم داده ها یا خطاهای پایگاه داده شکست بخورند.همیشه یک پیام کاربر پسند را نشان می دهند.
ادغام با Apple Watch و سایر منابع
HealthKit به طور خودکار داده ها را از Apple Watch، برنامه های شخص ثالث و ورودی های دستی جمع آوری می کند.برنامه iOS شما نیازی به تشخیص منبع ندارد مگر اینکه شما به طور خاص بخواهید با برنامه های تمرینی فیلتر کنید، نوشتن (FLT:18 اشیاء به HealthKit) را در نظر بگیرید، زمانی که یک کاربر شروع به تمرین در Apple Watch می کند، سیستم می تواند به طور خودکار معیارهایی را ثبت کند؛ برنامه همراه شما بعدا می تواند آن ها را بخواند.
برای نوشتن داده های تمرینی:
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 در UTC تنظیم شده اند، هنگامی که گروه بندی روز، تبدیل به منطقه زمانی محلی کاربر برای جلوگیری از سوء تفاهم.
- مسدود کردن موضوع اصلی: پرس و جوهای HealthKit به عنوان ناهمگن هستند، اما مدیران تکمیل آنها ممکن است بر روی به روز رسانی های UI Dispatch اجرا نشوند.
- برای چک کردن دسترسی به داده های بهداشتی: HealthKit در iPad و iPod Touch در دسترس نیست، همیشه قبل از هر گونه تعامل با آن تماس بگیرید.
گسترش با سوابق بهداشت و داده های بالینی
برای برنامه های متمرکز بر سلامت بالینی، HealthKit همچنین از سوابق سلامت (از طریق FHIR) پشتیبانی می کند، برنامه شما می تواند به ایمن سازی، نتایج آزمایشگاه، داروها و شرایط دسترسی داشته باشد.این فرصت ها را برای ردیاب های دارویی، چک کننده های آلرژی یا مدیریت بیماری مزمن باز می کند.
نتیجه گیری
API HealthKit ارائه می دهد یک پایه قوی و متمرکز برای ردیابی و نمایش داده های تناسب اندام با درک مدل مجوز، انواع پرس و جو و بهترین شیوه ها، شما می توانید یک برنامه که یکپارچه با اکوسیستم سلامت کاربر ادغام می شود، شروع با درک ساده و پرس و جو ضربان قلب، سپس به تدریج ویژگی های پیشرفته تر مانند به روز رسانی پس زمینه، اتصال، اتصال و سوابق بالینی را ترکیب کنید که ابزار نه تنها به کاربران کمک می کند، بلکه به آنها کمک می کند تا اهداف سلامتی خود را نیز کمک کند.
برای مطالعه بیشتر، با دستورالعمل های رسمی اسناد Apple HealthKit مشورت کنید ، HealthKit Human Interface] و منابع اجتماعی مانند Ray Ray Wenderlich's HealthKit برای نمونه های کد دستی.