אנו משלבים את Health Connect כדי לאחד את נתוני הבריאות של Android תחת API אחד, ולחסל את הפיצול. הצוות שלנו השלים למעלה מ-50 אינטגרציות של Health Connect עבור אפליקציות כושר, רפואה וביטוח, עם אחוז הצלחה של 100% בבדיקת Google Play. ארכיטקטורה נכונה מההתחלה חוסכת שבועות של עבודה ומפחיתה באגים בעת הוספת סוגי נתונים חדשים.
למה Health Connect היא הבחירה ההגיונית היחידה לבריאות ב-Android?
מקורות נתוני בריאות מפוצלים ב-Android הם דרך ישירה לחוב טכני. בעוד שחלק מהאפליקציות כותבות ל-Google Fit, אחרות משתמשות ב-SDK של צד שלישי, ומשתמשים עוברים בין שלושה מעקבים. החלפנו את הכאוס הזה ב-API יחיד: Health Connect. היא מובנית ב-Android 14 וזמינה במכשירים עם Android 9 ומעלה. האינטגרציה מהירה ב-40% מ-Google Fit בזכות ממשק אחיד ליותר מ-40 סוגי נתונים. Health Connect תומכת גם בסנכרון מצטבר באמצעות changesToken — אנלוגי ל-HKAnchoredObjectQuery ב-HealthKit. זה הופך עדכוני רקע למהירים פי 3 ומפחית את עומס הסוללה ב-30%.
מה השתנה עם הגעת Health Connect במקום Google Fit?
Google Fit הוא API ישן עם תמיכה מוגבלת והליך הרשאות מורכב. השוו: ב-Health Connect, ההרשאות מתבקשות דרך PermissionController של המערכת, לא דרך OAuth. זמן האינטגרציה קטן ב-40% בזכות ממשק אחיד ליותר מ-40 סוגי נתונים. Health Connect תומכת גם בסנכרון מצטבר באמצעות build.gradle — אנלוגי ל-implementation("androidx.health.connect:connect-client:1.1.0") ב-HealthKit. זה הופך עדכוני רקע למהירים פי 3 ומפחית את עומס הסוללה.
איך להגדיר הרשאות Health Connect?
שלב ראשון: הוסיפו את הספרייה ל-minSdk = 26 שלכם:
implementation("androidx.health.connect:connect-client:1.1.0") גרסה מינימלית: val healthConnectClient = HealthConnectClient.getOrCreate(context) when (HealthConnectClient.getSdkStatus(context)) { HealthConnectClient.SDK_AVAILABLE -> { /* работаем */ } HealthConnectClient.SDK_UNAVAILABLE_PROVIDER_UPDATE_REQUIRED -> { val intent = Intent(Intent.ACTION_VIEW).apply { data = Uri.parse("market://details?id=com.google.android.apps.healthdata") } startActivity(intent) } HealthConnectClient.SDK_UNAVAILABLE -> { /* Android < 9 */ } } val permissions = setOf( HealthPermission.getReadPermission(StepsRecord::class), HealthPermission.getReadPermission(HeartRateRecord::class), HealthPermission.getWritePermission(ExerciseSessionRecord::class) ) val requestPermissions = registerForActivityResult( PermissionController.createRequestPermissionResultContract() ) { granted -> if (granted.containsAll(permissions)) { /* все получены */ } } val granted = healthConnectClient.permissionController.getGrantedPermissions() if (!granted.containsAll(permissions)) { requestPermissions.launch(permissions) } . Health Connect עובדת על Android 9+ (ב-9–13 נדרשת התקנה מ-Play Store). בדקו זמינות ובקשו הרשאות:
val healthConnectClient = HealthConnectClient.getOrCreate(context)
when (HealthConnectClient.getSdkStatus(context)) {
HealthConnectClient.SDK_AVAILABLE -> {
/* работаем */
}
HealthConnectClient.SDK_UNAVAILABLE_PROVIDER_UPDATE_REQUIRED -> {
val intent = Intent(Intent.ACTION_VIEW).apply {
data = Uri.parse("market://details?id=com.google.android.apps.healthdata")
}
startActivity(intent)
}
HealthConnectClient.SDK_UNAVAILABLE -> {
/* Android < 9 */
}
}
val permissions = setOf(
HealthPermission.getReadPermission(StepsRecord::class),
HealthPermission.getReadPermission(HeartRateRecord::class),
HealthPermission.getWritePermission(ExerciseSessionRecord::class)
)
val requestPermissions = registerForActivityResult(
PermissionController.createRequestPermissionResultContract()
) { granted ->
if (granted.containsAll(permissions)) {
/* все получены */
}
}
val granted = healthConnectClient.permissionController.getGrantedPermissions()
if (!granted.containsAll(permissions)) {
requestPermissions.launch(permissions)
}גוגל מטילה דרישות מחמירות: האפליקציה שלכם חייבת לחתום על מדיניות הרשאות Health Connect ולספק מסך מדיניות פרטיות. הפרה עלולה לגרום לחסימה ב-Play Market. אנו עוזרים לכם לעבור את הבדיקה לפני השחרור, כולל הכנת מסמכים.
קריאה וכתיבת נתונים דרך Health Connect API Android
כל סוג נתונים הוא מחלקת Record נפרדת. קריאת שלבים לתקופה מתבצעת דרך ReadRecordsRequest. צבירה עם פירוט יומי משתמשת ב-AggregateGroupByPeriodRequest:
// Чтение шагов
val response = healthConnectClient.readRecords(
ReadRecordsRequest(
recordType = StepsRecord::class,
timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
)
)
val totalSteps = response.records.sumOf { it.count }
// Агрегация по дням
val aggregateRequest = AggregateGroupByPeriodRequest(
metrics = setOf(StepsRecord.COUNT_TOTAL),
timeRangeFilter = TimeRangeFilter.between(startTime, endTime),
timeRangeSlicer = Period.ofDays(1)
)
val result = healthConnectClient.aggregateGroupByPeriod(aggregateRequest)כתיבת אימונים: צרו // Чтение шагов val response = healthConnectClient.readRecords( ReadRecordsRequest( recordType = StepsRecord::class, timeRangeFilter = TimeRangeFilter.between(startTime, endTime) ) ) val totalSteps = response.records.sumOf { it.count } // Агрегация по дням val aggregateRequest = AggregateGroupByPeriodRequest( metrics = setOf(StepsRecord.COUNT_TOTAL), timeRangeFilter = TimeRangeFilter.between(startTime, endTime), timeRangeSlicer = Period.ofDays(1) ) val result = healthConnectClient.aggregateGroupByPeriod(aggregateRequest) ו-ExerciseSessionRecord, ואז קראו ל-DistanceRecord:
val exerciseSession = ExerciseSessionRecord(
startTime = workoutStart,
startZoneOffset = ZoneOffset.UTC,
endTime = workoutEnd,
endZoneOffset = ZoneOffset.UTC,
exerciseType = ExerciseSessionRecord.EXERCISE_TYPE_RUNNING,
title = "Утренняя пробежка"
)
val distanceRecord = DistanceRecord(
startTime = workoutStart,
startZoneOffset = ZoneOffset.UTC,
endTime = workoutEnd,
endZoneOffset = ZoneOffset.UTC,
distance = Length.meters(5200.0)
)
healthConnectClient.insertRecords(listOf(exerciseSession, distanceRecord)) מעבר מ-Google Fit: איך לא לאבד נתונים
אם האפליקציה שלכם השתמשה בעבר ב-Google Fit API, החלפת קריאות בלבד אינה מספיקה. Health Connect אינה מייבאת היסטוריה — המשתמש חייב להפעיל סנכרון ידנית בהגדרות. אנו ממליצים:
- הציגו דיאלוג עם הוראות להפעלת סנכרון.
- שמרו על אסימון הגישה של Google Fit לקריאת נתונים ישנים.
- כתבו נתונים חדשים ל-Health Connect, וטענו נתונים ישנים לפי דרישה.
עדכונים מצטברים מנוטרים דרך insertRecords:
val token = healthConnectClient.getChangesToken(
ChangesTokenRequest(setOf(StepsRecord::class))
)
val changes = healthConnectClient.getChanges(token)
val newToken = changes.nextChangesToken מה כלול בעבודת אינטגרציית Health Connect
| שלב | לוח זמנים | עלות | תוצרים |
|---|---|---|---|
| אינטגרציה בסיסית (קריאת צעדים, דופק, שינה) | 5–8 ימים | $2,500 | קוד, תיעוד, הגדרת הרשאות, כיסוי בדיקות |
| כתיבת אימונים + סנכרון שרת | 2–3 שבועות | $4,000–$6,000 | אינטגרציה עם changesToken, מעבר מ-Google Fit, הדרכה |
| תמיכה ב-Wear OS | +שבוע | $1,000 | אופטימיזציית ממשק, טיפול במסכים קטנים, תמיכה ל-90 יום |
כל החבילות כוללות:
- הכנה והגשה של מדיניות הרשאות Health Connect.
- יישום קריאה וכתיבה עבור סוגי נתונים נבחרים.
- הגדרת סנכרון מצטבר דרך
val exerciseSession = ExerciseSessionRecord( startTime = workoutStart, startZoneOffset = ZoneOffset.UTC, endTime = workoutEnd, endZoneOffset = ZoneOffset.UTC, exerciseType = ExerciseSessionRecord.EXERCISE_TYPE_RUNNING, title = "Утренняя пробежка" ) val distanceRecord = DistanceRecord( startTime = workoutStart, startZoneOffset = ZoneOffset.UTC, endTime = workoutEnd, endZoneOffset = ZoneOffset.UTC, distance = Length.meters(5200.0) ) healthConnectClient.insertRecords(listOf(exerciseSession, distanceRecord)). - טיפול בשגיאות וגיבוי כאשר Health Connect אינה זמינה.
- בדיקות על 5+ מכשירים עם גרסאות Android שונות.
- תיעוד אינטגרציה והוראות למשתמש.
- 30 ימי תמיכה לאחר השחרור.
השוואה: Health Connect מול Google Fit
| פרמטר | Health Connect | Google Fit |
|---|---|---|
| מספר סוגי נתונים | 40+ | 20+ |
| הרשאות | PermissionController של המערכת | OAuth 2.0 |
| גרסת Android מינימלית | 9 | 10 |
| סנכרון מצטבר | changesToken |
val token = healthConnectClient.getChangesToken( ChangesTokenRequest(setOf(StepsRecord::class)) ) val changes = healthConnectClient.getChanges(token) val newToken = changes.nextChangesToken |
| תמיכה ב-Wear OS | מובנית | דורש SDK נפרד |
Health Connect מעבדת בקשות פי 3 מהר יותר מ-Google Fit במהלך סנכרון רקע, אושר בבדיקות עומס (עד 5000 בקשות לשעה).
טעויות אינטגרציה נפוצות
- בקשת הרשאות ללא בדיקת זמינות — מובילה ל-
changesToken. תמיד בדקוchangesToken. - התעלמות משינויי אסימון — אתם מפסידים עדכונים. השתמשו ב-
Bucketלקריאה ברקע. - טיפול שגוי באזור זמן — תמיד שלחו חותמות זמן עם
IllegalStateException. - בקשות תכופות מדי — Health Connect מגבילה תדירות (כ-10 בקשות לדקה). השתמשו במטמון.
הניסיון וההבטחות שלנו
אנו מפתחים אפליקציות Android כבר 8 שנים, עם למעלה מ-200 אינטגרציות מוצלחות ודירוג שביעות רצון של 4.9/5 מלקוחות. למעלה מ-50 אינטגרציות Health Connect ללקוחות כושר, רפואה וביטוח, כולן עוברות את בדיקת Google Play ללא בעיות. צרו קשר לייעוץ. הזמינו אינטגרציית Health Connect היום ושחררו את הצוות שלכם מכאב הראש של פיצול נתונים.







