Table of Contents
Giới thiệu về hệ thống chăm sóc sức khỏe của Apple
Trong một kỷ nguyên nơi dữ liệu sức khỏe cá nhân có thể điều khiển sự hiểu biết hoạt động, iOS HealthKit API đã trở thành nền tảng cho các nhà phát triển các ứng dụng tăng cường và khỏe mạnh. Khung này được Apple giới thiệu với iOS 8, cung cấp một kho bảo mật để cung cấp các thông tin về sức khỏe và hoạt động. Bằng cách tích hợp HealthKit, ứng dụng của bạn có thể đọc và viết đến các cửa hàng dữ liệu ứng dụng sức khỏe, cho phép người dùng xem một quan sát thống nhất về các bước, nhịp tim, phân tích giấc ngủ, và thậm chí cả các hồ sơ lâm sàng. Bài này khám phá cách tăng cường các dữ liệu theo dõi và tăng cường độ tăng cường độ dinh dưỡng, bao gồm dữ liệu, thông tin và các chiến lược, và các dự án, và thực hiện tốt nhất.
Hiểu kiến trúc của HealthKit
Y tế Kit tổ chức dữ liệu quanh hai khái niệm chính: [FLT: 0] kiểu [FLT: 0] và [FLT:] [FLT: 3]. Kiểu dữ liệu định nghĩa loại đo lường hoặc ). Đối tượng dữ liệu là các ghi chép thật, có thể [FLT:] [FL:] LT] [FL: t (sự kiện đơn, hoặc một sự kiện duy nhất], [FLT: [FLT] có liên quan đến các mẫu liên quan, hoặc các yêu cầu sức khỏe: [V].
Thành phần chính
- HK HealTTore ) – điểm nhập trung tâm cho tất cả các hoạt động HealthKit.
- HKObjecttype ) – xác định một loại dữ liệu sức khỏe (số lượng, phân loại, hoặc đặc điểm).
- HKSampleQuery ) – Lấy một bộ mẫu đã cố định.
- Những người theo thuyết duy trì – Tính toán tổng hợp các giá trị (sum, bình thường, phút, tối đa, vv.) trong một khoảng thời gian.
- HKOb ServerQuery ) – Theo dõi các thay đổi để loại dữ liệu xác định, cho phép cập nhật nền.
Thiết lập quyền hạn — Yêu cầu truy cập
Trước khi trao đổi dữ liệu, ứng dụng của bạn phải yêu cầu sự cho phép bằng ). Để vừa đọc vừa ghi quyền ghi vào , cần phải dùng phím . Để theo dõi độ tập thể dục, thường đọc số bước, số năng lượng, nhịp tim và khả năng ghi.
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
}
}
Luôn luôn điều khiển cuộc gọi có vẻ duyên. Nếu người dùng từ chối, hãy tránh làm cản trở chức năng; thay vì thế, hãy giải thích tại sao dữ liệu cần thiết và cung cấp một mục nhập thủ công. Hãy nhớ rằng sự cho phép có thể được thay đổi sau này trong thẻ nguồn của ứng dụng Y tế.
Đang truy vấn dữ liệu vừa khít
Hệ thống y tế Kit cung cấp một số loại truy vấn để lấy dữ liệu hiệu quả. Ứng dụng phổ biến nhất cho việc tập thể dục là các mẫu mã và các bản tóm tắt thống kê.
HKSapleQuery — Lấy lại dữ liệu thô
Khi cần hồ sơ cá nhân, như đọc 100 nhịp tim hoặc bản ghi bước bước trước đây.
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)
Hồng KôngQuery — Dữ liệu phân loại
Tổng cộng, trung bình hoặc tối đa trong một khoảng thời gian nhất định (v. d., số lần đếm từng bước một), dùng [FLT: 9).
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)
Cơ chế Đối chiếu HKQuery – Dữ liệu thời gian
Để thể hiện biểu đồ mỗi ngày trong tuần qua, hãy dùng để thay đổi tỉ lệ cho mỗi ngày giữa lúc bắt đầu và cuối, khiến nó trở nên lý tưởng cho xu hướng.
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)
Hiển thị dữ liệu vừa khít
Một máy UI được thiết kế tốt biến dữ liệu Health Kit thành những thông tin về động lực.
- Thẻ Thể hiện mức đếm bước ngày nay, tích cực phút và nhịp tim trong bảng điều khiển.
- Chương trình GT:) Dùng dòng hay biểu đồ thanh để hiển thị các bước hàng tuần, năng lượng hoạt động hàng tháng, hay các vùng nhịp tim. Các dòng như ) Biểu đồ [FLT:] (iOS 16+) hoặc [FL:4] } VT (DHTTMTMTMTMMMMMMMMMMMTS] (DGTTTTTMTMTMTMTM)
- Vòng hoạt động cổ điển của Apple có thể được mô phỏng để hình dung, tập thể dục và đứng hàng giờ.
- Làm việc ra Summries: có thời gian, nhịp tim trung bình, khoảng cách và năng lượng đốt cháy cho mỗi lần ghi chép.
Ví dụ: Xây dựng bảng đếm từng bước
Kết hợp các yêu cầu trên với RPUI để tạo ra một máy đếm bước tăng tốc:
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
}
}
Trình phục vụ thời gian thật đã cập nhật với U.S.A.V.Query
Để giữ bảng điều khiển hiện thời không cần cập nhật bằng tay, hãy cài đặt . Hệ thống này ghi rõ ứng dụng của bạn khi dữ liệu mới được lưu vào HealthKit (ngay cả khi ứng dụng này được nền, nếu bạn đăng ký để gửi nền).
let observerQuery = HKObserverQuery(sampleType: stepType, predicate: nil) { query, completionHandler, error in
DispatchQueue.main.async { self.fetchTodaySteps() }
completionHandler()
}
healthStore.execute(observerQuery)
Để cập nhật nền, bạn cũng phải gọi . Chú ý rằng iOS gas backs backs để bảo tồn pin; hãy dùng điều này một cách rảnh và luôn luôn xử lý bộ quản lý hoàn thành.
Những thực hành tốt nhất để giữ sự riêng tư và an toàn
Dữ liệu sức khỏe rất nhạy cảm. và không tuân thủ có thể dẫn đến việc bị từ chối App Store.
- Yêu cầu dữ liệu trực tiếp: ) Chỉ yêu cầu các kiểu dữ liệu mà ứng dụng của bạn thực sự sử dụng.
- Những chuỗi giải thích rõ ràng: Mô tả sử dụng trong In In In In In In In Inform.plist nên đặc biệt, ví dụ, “Trích dẫn này cho thấy bạn đang làm gì mỗi ngày.
- Không bao giờ chia sẻ dữ liệu thô ngoài tập tin mà không có sự đồng ý rõ ràng của người dùng rõ ràng. Nếu đồng bộ hoá tới hậu phương của bạn, ẩn danh và mã hóa dữ liệu.
- [FLT: 0] Thay đổi xác thực:[FLT: 1] Theo dõi khi người dùng hủy bỏ quyền hoặc bằng cách kiểm tra tình trạng cho phép trước mỗi yêu cầu.
- Những lỗi sai cách duyên dáng: Health Kit truyries có thể bị lỗi vì sự cho phép, thiếu dữ liệu, hoặc lỗi cơ sở dữ liệu. Luôn luôn hiển thị một thông điệp thân thiện người dùng.
Hợp nhất với đồng hồ đo và các nguồn khác
Ứng dụng iOS không cần phân biệt nguồn, trừ khi bạn muốn lọc bằng nguồn riêng. Để thực hiện ứng dụng đối tượng cho Health Kit. Khi người dùng bắt đầu làm việc trên hệ thống xem tập tin, hệ thống có thể tự động ghi lại các mô phỏng. Để thực hiện ứng dụng iOS, xem xét việc ghi đối tượng cho Health Kit. Khi người dùng bắt đầu làm việc trên hệ thống xem tập tin, ứng dụng is (SB) có thể đọc những ứng dụng này sau này.
Để ghi dữ liệu làm việc:
let workout = HKWorkout(activityType: .running, start: workoutStart, end: workoutEnd, duration: duration, totalEnergyBurned: energy, totalDistance: distance, metadata: nil)
healthStore.save(workout) { success, error in
// Handle
}
Bạn cũng có thể thêm các mẫu liên quan (v.g., nhịp tim, tuyến đường) vào việc thực tập và .
Những cạm bẫy thông thường và cách tránh chúng
- Dữ liệu liên kết luôn luôn sẵn sàng: Người dùng mới có thể không có dữ liệu HealthKit. Thiết kế UI của bạn để hiển thị người giữ chỗ hoặc khuyến khích người dùng bắt đầu theo dõi thông qua ứng dụng Health hoặc Apple Watch.
- Đang truy vấn quá nhiều dữ liệu cùng một lúc: các thư mục lớn (v. d., tất cả các mẫu trong năm vừa qua) có thể chậm và rơi vào bộ nhớ. Hãy dùng định sẵn ngày tháng và các bước khởi động với giới hạn.
- Vùng thời gian: ) Các nhãn giờ lành mạnh ở UTC. Khi nhóm lại theo ngày, chuyển sang vùng thời gian địa phương để tránh bị xem là sai.
- Đang khóa sợi chính: ) Y tế Kit truys là arynronous nhưng bộ quản lý hoàn thành của họ có thể không chạy trên chỉ chính. Trình nền UI .
- Để kiểm tra dữ liệu có sẵn về sức khỏe: Health Kit không có trong iPad và iPod. Luôn luôn gọi trước khi bất kỳ tương tác nào xảy ra.
Mở rộng với hồ sơ sức khỏe và dữ liệu bệnh viện
Để tập trung vào sức khỏe, HealthKit cũng hỗ trợ Bản ghi ). Với sự cho phép của người dùng, ứng dụng của bạn có thể truy cập các kết quả phòng thí nghiệm, thuốc và điều kiện. Điều này mở ra khả năng điều khiển thiết bị theo dõi thuốc, kiểm tra dị ứng, hoặc quản lý điều kiện lâu dài. Tuy nhiên, những dữ liệu này đòi hỏi thêm sự xem xét lại quyền lợi Y tế của Apple.
Kết luận
Nhờ hiểu được cách thức cho phép, yêu cầu các loại và thực hành tốt nhất, bạn có thể xây dựng một ứng dụng tích hợp chặt chẽ với hệ sinh thái của người dùng. Bắt đầu với các bước và nhịp tim đơn giản, rồi dần dần kết hợp các tính năng tiên tiến hơn như cập nhật nền, xem kết nối và ghi chép lâm sàng. Kết quả là một công cụ mạnh mẽ không những cho người dùng biết về hệ sinh thái của họ mà còn thúc đẩy họ đạt được mục tiêu thích ứng.
Để đọc thêm, hãy tham khảo ý kiến chính thức tài liệu về sức khỏe ) [FLT: 1] [FLT:] Webnt Kit Trading [FLT:], và tài liệu cộng đồng như Ray Wenderlicy's Health Kit [FL:5] [FL:5] cho các quy tắc của người dùng.