MicrocosmWorksInnovere og Arkitektere Digitale Kosmos
OmKontakt
MicrocosmWorksInnoverer og arkitekterer digitale kosmos

Leverer IT-løsninger, der betyder noget. Vi brænder for teknologi, sikkerhed og at hjælpe virksomheder med at vokse gennem pålidelig, innovativ IT-infrastruktur.

[email protected]
+91 7011868196
New Delhi, India

AI Væksthub

AI HubStartup-innovationVirksomhedsaccelerator

Løsninger

Alle løsningerSundhed & Fitness AppsAI VideoplatformAI Agentudvikling

Ressourcer

IndsigterIndustri GuiderBrugssag BlueprintsArkitektur MønstreCase Studier

Virksomhed

Om OsKontaktVores Arbejde

Tjenester

Digital RådgivningCloud InfrastrukturSaaS UdviklingAI UdviklingVideo Teknologi
ERP UdviklingZoho TilpasningOdoo UdviklingSalesforce IntegrationTilpasset CRM Udvikling
QuickBooks IntegrationIoT LøsningerBlockchain Udvikling
Cybersikkerhed RådgivningIT-support - L3

© 2026 MicrocosmWorks. Alle rettigheder forbeholdes.

PrivatlivspolitikServicevilkår
Tilbage til indsigter
SaaS Applications

Synkronisering af Apple Health & Health Connect

Apple HealthKit og Android Health Connect er næsten intet enige om — forskellige læsemodeller, tilladelsesordninger og dataformer. Her er hvordan vi byggede en tre-lags synkroniseringsarkitektur, der normaliserer begge til én deduplikeret, tidszone-korrekt daglig sundhedsprofil, uden at dræne batteriet eller dobbelttælle skridt fra overlappende enheder.

Mayank Joshi.webpMayank Chandra Joshi
•
August 12, 2026
•
Opdateret 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

Skridt, distance, kalorier, hjertefrekvens og søvn skal hentes fra brugerens platform (Android Health Connect på Android, Apple HealthKit på iOS) af en sundheds- og ernæringsapp — og præsenteres som én ren, deduplikeret daglig profil. Der er meget få ligheder mellem de to API'er: separate læsemekanismer, forskellige autorisationsordninger og forskellige datastrukturer. Vi byggede det mobile synkroniseringslag, der får dem til at fremstå som ét.

 

Udfordringen

  • To native API'er, der intet er enige om. Apple HealthKit returnerer daglige aggregater via callbacks; Health Connect returnerer rå, sideinddelte prøver med rig kildemetadata. Samme koncepter, helt forskellige former — og appen skulle normalisere begge til ét skema.
  • Dobbeltoptælling er standard. En telefon, et smartwatch og en tredjepartsapp kan alle rapportere de samme 8.000 skridt. Naiv opsummering puster alle målinger op. Appen skulle genkende overlappende kilder og tælle hver virkelige aktivitet én gang.
  • Batteri og netværk kan ikke betale for friskhed. Sundhedsdata ændrer sig hele dagen, men at læse hele historikken ved hver synkronisering ville dræne batteriet og mætte mobilforbindelser. Synkroniseringskadencen skulle forblive let, mens den stadig føltes live.
  • Tilladelser kan være forvirrende. Snesevis af datatyper, to tilladelsesmodeller, baggrundslæsningsbegrænsninger og brugere, der giver visse tilladelser, men ikke andre — alt dette skal appen håndtere uden at crashe flowet.

     

Vores løsning

Vi byggede en tre-lags synkronisering: et tyndt nativt lag læser hver platforms API, et normaliseringslag på enheden deduplikerer og samler dataene i daglige opsummeringer, og backend'en gemmer det og afstemmer det i en enkelt pålidelig hovedbog. Klienten sender aldrig rå prøver — den sender rene, tidszone-korrekte daglige opsummeringer.

health-sync-pipeline.webp

 

Arkitektur

  • iOS læser Apple HealthKit via react-native-health; Android læser Health Connect via react-native-health-connect.
  • Normalisering på enheden omdanner begge platformes output til ét skema og deduplikerer, før noget forlader telefonen.
  • Synkroniseringstriggere — 30 dages historik ved første lancering, derefter lette 1-dags inkrementelle læsninger med et 10-minutters interval og ved hver app-genoptagelse.
  • Transport — normaliserede daglige opsummeringer POSTes til hovedserverens /user-health/system-activity, som videresender dem (med bruger-ID + tidszone) til sundheds-microservicen.
  • Persistens — hver kilde/dag lagres idempotent som en HealthSystemAggregate; en MongoDB change stream afstemmer den derefter til en daglig HealthLedger.
  • Expo / React Native styret workflow med native HealthKit- og Health Connect-moduler.

     

Nøglefunktioner

  1. Én normaliseringskontrakt for to API'er. Platformspecifikke læsere fører et enkelt formatHealthData trin, der udsender den samme form uanset kilde — så backend og UI aldrig forgrener sig på iOS vs Android.

2. Maksimum-baseret deduplikering på enheden. Inden for hver kilde summeres en dags aflæsninger; derefter er den daglige værdi Math.max() på tværs af kilder (kalorier indtastet efter source|deviceType), så flere aflæsninger fra én enhed akkumuleres, mens et ur og en telefon, der rapporterer den samme dag, ikke dobbelttæller: 
 

// 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.Den rigtige læsestrategi pr. platform. Health Connect-læsninger er sideinddelte med en pageToken-løkke (1.000 poster/side); HealthKit's daglige aggregater loopes dag for dag. Hver særhed er indeholdt i sin egen læser, usynlig for resten af appen.

4. En synkroniseringskadence, der respekterer batteriet. En fuld 30-dages tilbagefyldning kører kun én gang (beskyttet af et første-kald-flag); derefter trækker hver synkronisering kun én dag — hurtigt på mobildata, billigt på strøm.

5. Tidszone-korrekt daglig gruppering. Prøver inddeles i YYYY-MM-DD-nøgler i brugerens egen tidszone, så en træning kl. 23:00 lander på den rigtige dag, uanset hvor serveren er placeret.

6. Idempotente backend-skrivninger. Hver opsummering upsertes på (userId, deviceId, source, date) — genafsendelse af samme dag er en no-op, hvilket gør genforsøg og overlappende synkroniseringer sikre.

7. Ærlig nedbrydning. Manglende tilladelser, tomme læsninger og Health Connect rate-limit-fejl fanges og vises pænt — en tom dag crasher aldrig synkroniseringen, og brugeren får en klar meddelelse i stedet for en tavs fejl.

 

Resultater

  • En enkelt, konsistent sundhedsprofil på tværs af iOS og Android — platformforskellen er usynlig for resten af appen.
  • Overlappende enheds-/app-kilder deduplikeres, så skridt og kalorier afspejler virkeligheden i stedet for oppustede summer.
  • Lette inkrementelle synkroniseringer holder data friske uden at dræne batteriet eller forbruge mobildata.
  • Tidszone-korrekte, idempotente skrivninger betyder, at hver måling lander på den rigtige dag, og genforsøg korrumperer aldrig posten.

     

Teknologistak

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

Apple HealthKitAndroid Health ConnectHealth Data SyncMobile App DevelopmentReact Native
Mayank Joshi.webp

Om forfatteren

Mayank Chandra Joshi

AI & Cloud Solutions Expert at MicrocosmWorks

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

Vil du lære mere?

Kontakt os for at diskutere, hvordan vi kan hjælpe med at implementere disse løsninger for din virksomhed.

Kom i Kontakt

Ofte stillede spørgsmål

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!