MicrocosmWorksInovasi dan Arsitektur Kosmos Digital
TentangKontak
MicrocosmWorksInovasi dan Arsitektur Digital Cosmos

Menyediakan solusi IT yang penting. Kami bersemangat tentang teknologi, keamanan, dan membantu bisnis tumbuh melalui infrastruktur IT yang andal dan inovatif.

[email protected]
+91 7011868196
New Delhi, India

Pusat Pertumbuhan AI

AI HubInovasi StartupAkselerator Perusahaan

Solusi

Semua SolusiAplikasi Kesehatan & KebugaranPlatform Video AIPengembangan Agen AI

Sumber Daya

WawasanPanduan IndustriCetak Biru Kasus PenggunaanPola ArsitekturStudi Kasus

Perusahaan

Tentang KamiKontakPekerjaan Kami

Layanan

Konsultasi DigitalInfrastruktur CloudPengembangan SaaSPengembangan AITeknologi Video
Pengembangan ERPKustomisasi ZohoPengembangan OdooIntegrasi SalesforcePengembangan CRM Kustom
Integrasi QuickBooksSolusi IoTPengembangan Blockchain
Konsultasi Keamanan SiberDukungan IT - L3

© 2026 MicrocosmWorks. Semua hak dilindungi.

Kebijakan PrivasiSyarat Layanan
Kembali ke Wawasan
SaaS Applications

Menyinkronkan Apple Health & Health Connect

Apple HealthKit dan Android Health Connect hampir tidak memiliki kesamaan — model pembacaan, skema izin, dan bentuk data yang berbeda. Berikut adalah cara kami membangun arsitektur sinkronisasi tiga lapis yang menormalisasi keduanya menjadi satu profil kesehatan harian yang terdeduplikasi dan benar zona waktu, tanpa menguras baterai atau menghitung ganda langkah dari perangkat yang tumpang tindih.

Mayank Joshi.webpMayank Chandra Joshi
•
August 12, 2026
•
Diperbarui August 29, 2026
•
4 min read
Health data synchronization architecture connecting Apple HealthKit and Android Health Connect to a unified health profile with on-device normalization.
4 min read

Langkah, jarak, kalori, detak jantung, dan tidur harus diambil dari platform pengguna (Android Health Connect di Android, Apple HealthKit di iOS) oleh aplikasi kesehatan dan nutrisi — dan menyajikannya sebagai satu profil harian yang rapi dan terdeduplikasi. Sangat sedikit kesamaan antara kedua API tersebut: mekanisme pembacaan yang terpisah, skema otorisasi yang berbeda, dan struktur data yang berbeda. Kami membangun lapisan sinkronisasi seluler yang membuat keduanya terlihat seperti satu kesatuan.

 

Tantangan

  • Dua API native yang tidak memiliki kesamaan. Apple HealthKit mengembalikan agregat harian melalui callback; Health Connect mengembalikan sampel mentah yang berhalaman dengan metadata sumber yang kaya. Konsep yang sama, bentuk yang sangat berbeda — dan aplikasi harus menormalisasi keduanya menjadi satu skema.
  • Penghitungan ganda adalah standar. Telepon, smartwatch, dan aplikasi pihak ketiga dapat melaporkan 8.000 langkah yang sama. Menjumlahkannya secara sederhana akan menggembungkan setiap metrik. Aplikasi perlu mengenali sumber yang tumpang tindih dan menghitung setiap aktivitas dunia nyata sekali saja.
  • Baterai dan jaringan tidak bisa mengorbankan kesegaran data. Data kesehatan berubah sepanjang hari, tetapi membaca seluruh riwayat pada setiap sinkronisasi akan menguras baterai dan membebani koneksi seluler. Ritme sinkronisasi harus tetap ringan namun terasa selalu terkini.
  • Izin bisa membingungkan. Puluhan jenis data, dua model izin, pembatasan pembacaan latar belakang, dan pengguna yang memberikan beberapa cakupan tetapi tidak yang lain — semuanya harus ditangani oleh aplikasi tanpa mengganggu alur.

     

Solusi Kami

Kami membangun sinkronisasi tiga lapis: lapisan native yang tipis membaca API setiap platform, lapisan normalisasi on-device melakukan deduplikasi dan menggulung data menjadi ringkasan harian, dan backend menyimpannya serta merekonsiliasinya ke dalam satu ledger terpercaya. Klien tidak pernah mengirimkan sampel mentah — ia mengirimkan rollup harian yang bersih dan sesuai zona waktu.

health-sync-pipeline.webp

 

Arsitektur

  • iOS membaca Apple HealthKit melalui react-native-health; Android membaca Health Connect melalui react-native-health-connect.
  • Normalisasi on-device mengubah output kedua platform menjadi satu schema dan melakukan deduplikasi sebelum data meninggalkan ponsel.
  • Pemicu sinkronisasi — 30 hari riwayat pada peluncuran pertama, kemudian pembacaan incremental ringan 1 hari pada interval 10 menit dan pada setiap aplikasi dilanjutkan.
  • Transportasi — rollup harian yang dinormalisasi di-POST ke server utama di /user-health/system-activity, yang meneruskannya (dengan ID pengguna + zona waktu) ke microservice kesehatan.
  • Persistensi — setiap sumber/hari disimpan secara idempoten sebagai HealthSystemAggregate; MongoDB change stream kemudian merekonsiliasinya menjadi HealthLedger per hari.
  • Expo / React Native managed workflow dengan modul HealthKit dan Health Connect native.

     

Fitur Utama

  1. Satu kontrak normalisasi untuk dua API. Pembaca khusus platform memasok satu langkah formatHealthData yang menghasilkan bentuk yang sama terlepas dari sumbernya — sehingga backend dan UI tidak pernah bercabang berdasarkan iOS vs Android.

2. Deduplikasi berbasis maks di perangkat. Dalam setiap sumber, pembacaan satu hari dijumlahkan; kemudian nilai harian adalah Math.max() lintas sumber (kalori di-key oleh source|deviceType), sehingga beberapa pembacaan dari satu perangkat terakumulasi sementara jam tangan dan telepon yang melaporkan hari yang sama tidak berlipat ganda: 
 

// Sum readings within each source, then take the max ACROSS sources

dateSourceMap[date][source] += entry.count;

const totalSteps = Math.ceil(Math.max(...Object.values(dateSourceMap[date])));

3.Strategi pembacaan yang tepat per platform. Pembacaan Health Connect berhalaman dengan loop pageToken (1.000 catatan/halaman); agregat harian HealthKit diulang hari demi hari. Setiap keunikan terkandung dalam pembacanya sendiri, tidak terlihat oleh bagian aplikasi lainnya.

4. Ritme sinkronisasi yang menghargai baterai. Pengisian ulang 30 hari penuh hanya berjalan sekali (dijaga oleh flag panggilan pertama); setelah itu, setiap sinkronisasi hanya menarik satu hari — cepat pada seluler, hemat daya.

5. Pengelompokan harian yang benar berdasarkan zona waktu. Sampel dikelompokkan ke dalam key YYYY-MM-DD di zona waktu pengguna sendiri, sehingga latihan pada pukul 11 malam jatuh pada hari yang tepat di mana pun server berada.

6. Penulisan backend yang idempoten. Setiap rollup melakukan upsert pada (userId, deviceId, source, date) — mengirim ulang hari yang sama adalah no-op, membuat percobaan ulang dan sinkronisasi yang tumpang tindih aman.

7. Degradasi yang jujur. Izin yang hilang, pembacaan kosong, dan kesalahan batas-laju Health Connect ditangkap dan ditampilkan dengan jelas — hari yang kosong tidak pernah menghentikan sinkronisasi, dan pengguna mendapatkan petunjuk yang jelas alih-alih kegagalan tanpa pemberitahuan.

 

Hasil

  • Satu profil kesehatan yang konsisten di seluruh iOS dan Android — perbedaan platform tidak terlihat oleh bagian aplikasi lainnya.
  • Sumber perangkat/aplikasi yang tumpang tindih dideduplikasi, sehingga langkah dan kalori mencerminkan realitas alih-alih jumlah yang digembungkan.
  • Sinkronisasi incremental ringan menjaga data tetap segar tanpa menguras baterai atau menghabiskan data seluler.
  • Penulisan yang benar berdasarkan zona waktu dan idempoten berarti setiap metrik jatuh pada hari yang tepat, dan percobaan ulang tidak pernah merusak catatan.

     

Tumpukan Teknologi

React Native (Expo) · react-native-health (HealthKit) · react-native-health-connect · NestJS · MongoDB · MongoDB Change Streams · moment-timezone

Apple HealthKitAndroid Health ConnectSinkronisasi Data KesehatanPengembangan Aplikasi SelulerReact Native
Mayank Joshi.webp

Tentang Penulis

Mayank Chandra Joshi

AI & Cloud Solutions Expert at MicrocosmWorks

Building innovative AI-powered solutions and helping businesses transform through cutting-edge technology.

Ingin mempelajari lebih lanjut?

Hubungi kami untuk mendiskusikan bagaimana kami dapat membantu mengimplementasikan solusi ini untuk bisnis Anda.

Hubungi Kami

Pertanyaan yang Sering Diajukan

A shared normalization layer converts HealthKit and Health Connect data into the same schema, allowing iOS and Android health data to be handled consistently.

The sync layer aggregates readings by source and uses the maximum daily value across overlapping sources, preventing the same activity from being counted multiple times.

After an initial 30-day history sync, the app performs lightweight one-day incremental reads every 10 minutes and when the app resumes, keeping data fresh while limiting battery and network usage.

Health samples are grouped into daily YYYY-MM-DD values using the user's local timezone, ensuring activities are assigned to the correct calendar day.

The backend upserts each daily health aggregate using identifiers such as user, device, source, and date, making repeated syncs safe without creating duplicate records.

Comments (0)

Share your thoughts and join the conversation

Leave a Comment

Your email will not be published

No comments yet

Be the first to share your thoughts!