How to get heart rate in real time on Apple Watch?

Tepová frekvence z Apple Watch: Jak na to?

21/07/2026

Rating: 4.77 (5548 votes)

Získávání dat o tepové frekvenci z Apple Watch v reálném čase a jejich následná synchronizace se serverem představuje pro mnoho vývojářů významnou výzvu. Zatímco HealthKit nabízí robustní rozhraní pro přístup k zdravotním datům, specifika nepřetržitého monitoringu a přenosu dat na pozadí narážejí na přísná omezení operačního systému watchOS a iOS, která jsou navržena pro optimalizaci výdrže baterie a ochranu soukromí uživatelů. Tento článek se ponoří do těchto výzev a nabídne ověřená řešení, jak dosáhnout téměř reálného času pro vaši aplikaci, s důrazem na ty nejefektivnější metody.

How to send a message from Apple Watch app?
Sending a message from the app to the watch is done in two parts. First, we need to check whether the watch is reachable, which in practice means "is our Apple Watch app running and in the foreground?" Second, we need to use the sendMessage() method of WCSession to send a dictionary of data.

Mnoho vývojářů se na začátku potýká s podobnými problémy. První pokusy často zahrnují spuštění aplikace přímo na Apple Watch s cílem odesílat data na server. Problém nastává ve chvíli, kdy se obrazovka hodinek vypne – aplikace přestane odesílat data. Dalším krokem bývá dotazování HealthKitu na iPhonu každých pět sekund, což funguje, dokud je aplikace v popředí. Jakmile se však přesune na pozadí, sběr dat se zastaví. Ačkoliv existuje funkce enableBackgroundDeliveryForType, která by měla probouzet aplikaci na pozadí pro zpracování nových dat, pro typy dat jako je tepová frekvence nebo kroky, které vyžadují nepřetržité sledování senzorem, tato metoda není spolehlivá ani efektivní. Jsme zde, abychom vám ukázali, jak se z této zapeklité situace dostat.

Obsahový index

Proč standardní metody selhávají pro data v reálném čase?

Operační systémy watchOS a iOS jsou navrženy s prioritou na výdrž baterie a soukromí uživatele. To znamená, že aplikace mají velmi omezené možnosti, jak běžet na pozadí, a ještě více, jak aktivně využívat senzory, jako je snímač tepové frekvence. Zde jsou hlavní důvody, proč běžné přístupy nefungují pro nepřetržitý sběr dat:

  • Omezení běhu na pozadí na Apple Watch: Jakmile se obrazovka Apple Watch vypne, aplikace přejde do pasivního stavu, aby šetřila baterii. Senzory se deaktivují a aplikace nemá oprávnění k nepřetržitému sběru dat nebo odesílání informací.
  • Omezení běhu na pozadí na iPhonu: Podobně jako u Apple Watch, aplikace na iPhonu nemohou nepřetržitě běžet na pozadí a dotazovat se HealthKitu každých pár sekund. iOS striktně reguluje, kdy a jak dlouho mohou aplikace provádět úkoly na pozadí, a neumožňuje jim neustále probouzet systém pro sběr dat ze senzorů.
  • enableBackgroundDeliveryForType: Tato funkce je určena pro pasivní sledování změn v HealthKitu, například pro nové záznamy o krocích, které byly synchronizovány z Apple Watch. Není však určena k tomu, aby aktivně probouzela aplikaci a iniciovala nepřetržité čtení dat ze senzoru tepové frekvence. Pro takové použití je neefektivní a nespolehlivá.

Tyto systémové omezení jsou klíčové pro pochopení, proč je nutné zvolit jiný přístup pro získání dat v reálném čase.

Řešení: Využití tréninkových relací (Workout Sessions)

Oficiální a nejspolehlivější způsob, jak získat nepřetržitá data o tepové frekvenci z Apple Watch, je zahájení tréninkové relace (HKWorkoutSession) v kombinaci s HKLiveWorkoutBuilder. Tento přístup je speciálně navržen společností Apple pro fitness a zdravotní aplikace, které potřebují aktivně monitorovat biometrická data během cvičení nebo jiných aktivit. Když je aktivní tréninková relace, Apple Watch udržují senzory aktivní a umožňují vaší aplikaci nepřetržitě přijímat data, i když je obrazovka vypnutá.

Jak funguje tréninková relace?

Tréninková relace signalizuje watchOS, že aplikace provádí aktivitu vyžadující nepřetržitý přístup k senzorům. To má několik klíčových výhod:

  • Aktivní senzory: Snímač tepové frekvence zůstává aktivní a nepřetržitě měří tep.
  • Běh na pozadí: Vaše aplikace získává oprávnění k běhu na pozadí, což jí umožňuje přijímat data a případně je odesílat na iPhone.
  • Správa dat:HKLiveWorkoutBuilder je navržen pro sběr dat během živého tréninku a jejich průběžné ukládání do HealthKitu.

Implementace tréninkové relace a sběru dat

Pro efektivní sběr dat tepové frekvence v reálném čase budete potřebovat komponenty na Apple Watch i na iPhonu.

Na Apple Watch (watchOS aplikace):

  1. Žádost o oprávnění: Nejprve musíte požádat uživatele o oprávnění k přístupu k datům tepové frekvence a k zahájení tréninkových relací (HKWorkoutActivityType a HKHealthStore.requestAuthorization).
  2. Zahájení HKWorkoutSession: Vytvořte a spusťte instanci HKWorkoutSession. To signalizuje systému, že se má spustit aktivní trénink.
  3. Vytvoření HKLiveWorkoutBuilder: Tento builder slouží k agregaci dat během tréninku. Připojte jej k vaší HKWorkoutSession.
  4. Přidání dotazů na data: Použijte HKObserverQuery nebo HKAnchoredObjectQuery k monitorování nových vzorků tepové frekvence. Klíčové je, že tyto dotazy budou fungovat nepřetržitě, dokud je tréninková relace aktivní. V rámci callbacku dotazu (např. updateHandler) získáte nejnovější data.
  5. Přenos dat na iPhone: Jakmile získáte data tepové frekvence (např. každých 5 sekund), můžete je odeslat na iPhone pomocí WatchConnectivity frameworku. Použijte WCSession.default.sendMessage(_:replyHandler:errorHandler:) pro data v reálném čase, která vyžadují okamžitou odezvu, nebo transferUserInfo(_:) pro data, která mohou být doručena, když je iPhone k dispozici.
  6. Ukončení tréninkové relace: Po dokončení monitoringu je nezbytné tréninkovou relaci ukončit, aby se šetřila baterie. Data shromážděná pomocí HKLiveWorkoutBuilder se automaticky uloží do HealthKitu.

Na iPhonu (iOS aplikace):

  1. Nastavení WCSessionDelegate: Na iPhonu implementujte WCSessionDelegate a aktivujte relaci.
  2. Přijímání dat: V metodě session(_:didReceiveMessage:replyHandler:) nebo session(_:didReceiveUserInfo:) budete přijímat data tepové frekvence odeslaná z Apple Watch.
  3. Synchronizace se serverem: Jakmile jsou data na iPhonu, můžete je odeslat na váš server. Pro odesílání na pozadí můžete využít URLSession s konfigurací pro úlohy na pozadí (URLSessionConfiguration.background), která umožňuje dokončit nahrávání i v případě, že aplikace přejde na pozadí nebo je ukončena. Nicméně, pamatujte, že toto stále není záruka odesílání každých 5-10 sekund, pokud aplikace není aktivní. Systém stále řídí, kdy se úkoly na pozadí spustí.

Tento přístup, ačkoliv je určen primárně pro „cvičební“ scénáře, je jediným spolehlivým způsobem, jak získat nepřetržitý tok dat tepové frekvence z Apple Watch. Pokud vaše aplikace není fitness orientovaná, budete muset uživatele informovat, že pro nepřetržité sledování je nutné „zahájit trénink“.

Přenos dat z Apple Watch na iPhone pomocí WatchConnectivity

WatchConnectivity je klíčový framework pro komunikaci mezi Apple Watch a spárovaným iPhonem. Umožňuje obousměrnou výměnu dat a je nezbytný pro váš scénář.

Jak WatchConnectivity funguje?

WCSession je hlavní třída, která spravuje spojení. Obě strany (Watch i iPhone) musí mít aktivní relaci a být připraveny k příjmu dat. Existuje několik způsobů přenosu dat:

  • sendMessage: Určeno pro okamžitou komunikaci, když jsou obě aplikace (nebo alespoň iPhone v popředí) aktivní. Zprávy jsou doručeny rychle, ale pokud příjemce není připraven, mohou selhat. Ideální pro „real-time“ data.
  • transferUserInfo: Pro přenos dat, která nemusí být doručena okamžitě. Data jsou ve frontě a doručena, když je příjemce k dispozici. Lze použít pro robustnější, ale méně „real-time“ přenosy na pozadí.
  • transferFile: Pro větší soubory.
  • updateApplicationContext: Pro synchronizaci stavu aplikací.

Pro váš případ, kdy potřebujete posílat data každých 5 sekund, je sendMessage preferovaný, dokud je aplikace na Apple Watch a iPhone aktivní (i když iPhone je na pozadí, ale aplikace je probuzena přes WatchConnectivity). Pokud iPhone aplikace není aktivní, sendMessage může selhat a je lepší se spolehnout na transferUserInfo, i když to může znamenat zpoždění doručení.

Synchronizace dat se serverem z iPhonu na pozadí

Jakmile jsou data tepové frekvence úspěšně přenesena z Apple Watch na iPhone, dalším krokem je odeslání těchto dat na váš server. Zde opět narazíte na omezení související s během na pozadí na iOS.

Možnosti pro odesílání na pozadí:

  1. URLSession s konfigurací na pozadí: Toto je nejlepší přístup pro spolehlivé odesílání dat na server, i když aplikace není v popředí. Vytvoříte URLSession s URLSessionConfiguration.background. To umožňuje systému spravovat odesílání dat a dokončit ho, i když je vaše aplikace pozastavena nebo ukončena. Když se přenos dokončí, systém může vaši aplikaci probudit na krátkou dobu, aby zpracovala odpověď. Nicméně, to neznamená, že můžete spouštět odesílání každých 5-10 sekund. Systém rozhoduje, kdy je vhodné úkol spustit, a to může trvat déle než 10 sekund.
  2. Background Fetch (performFetchWithCompletionHandler): Tato metoda umožňuje systému pravidelně probouzet vaši aplikaci na pozadí pro stahování nového obsahu. Interval je však zcela v rukou systému a může se pohybovat od minut až po hodiny. Není vhodná pro „real-time“ data každých 5-10 sekund.
  3. Background Processing Tasks (iOS 13+): Novější API, které poskytuje více kontroly nad tím, kdy a jak dlouho mohou úkoly běžet na pozadí. Stále však podléhá systémovým omezením a není určeno pro nepřetržité, vysoce frekvenční úkoly.

Základní pravidlo zůstává: skutečně nepřetržité spouštění úkolů každých 5-10 sekund na iPhonu na pozadí je nemožné kvůli ochraně baterie a soukromí. Nejbližšímu „real-time“ se přiblížíte, když je aplikace v popředí, nebo když je aktivní tréninková relace a data se přenášejí a následně odesílají pomocí URLSession na pozadí, přičemž musíte tolerovat určitá zpoždění.

Dopad na životnost baterie

Je nezbytné si uvědomit, že nepřetržité monitorování tepové frekvence a aktivní přenos dat má významný dopad na životnost baterie jak Apple Watch, tak iPhonu. Snímač tepové frekvence je energeticky náročný, a pokud je neustále aktivní, baterie se vybije mnohem rychleji než obvykle. Ujistěte se, že vaši uživatelé jsou na tuto skutečnost upozorněni a že vaše aplikace poskytuje jasné indikátory, kdy je aktivní nepřetržité sledování.

Srovnávací tabulka metod získávání dat tepové frekvence

MetodaSchopnost real-timeDopad na bateriiPřípad použitíSpolehlivost na pozadí
Standardní HealthKit dotaz (iPhone)Nízká (pouze v popředí)NízkýJednorázové, manuální měřeníŽádná (mimo popředí)
Tréninková relace (Apple Watch) + WatchConnectivityVysoká (během relace)VysokýAktivní trénink, nepřetržité sledováníVysoká (během relace)
enableBackgroundDeliveryForTypeNízkáNízkýPasivní sledování změn (kroky, spánek), ne pro aktivní sběr tepuStřední (pro podporované typy dat)
Periodický Background Fetch (iPhone)Velmi nízká (systém řídí interval)NízkýStahování nového obsahu, ne real-time dataNízká (interval je nekontrolovatelný)

Často kladené otázky (FAQ)

Lze získat data tepové frekvence v pozadí bez tréninkové relace?

Ne, spolehlivě a nepřetržitě ne. Apple omezuje přístup k senzorům na pozadí z důvodů úspory baterie a ochrany soukromí. Tréninková relace je jediným oficiálním mechanismem pro nepřetržité aktivní sledování tepové frekvence na Apple Watch.

Jaký je dopad na baterii při nepřetržitém monitoringu tepu?

Dopad je značný. Nepřetržité používání snímače tepové frekvence a aktivní přenos dat výrazně zkrátí výdrž baterie jak Apple Watch, tak iPhonu. Uživatelé by měli být na tuto skutečnost upozorněni.

Je WatchConnectivity spolehlivé pro real-time přenos?

Ano, pro „téměř real-time“ přenos dat z Apple Watch na iPhone je sendMessage metoda v WatchConnectivity spolehlivá, pokud je iPhone aplikace aktivní (i na pozadí, pokud je probuzena). Pro data, která mohou být doručena s mírným zpožděním, je transferUserInfo robustnější pro pozadí.

Proč Apple omezuje background tasks tak přísně?

Hlavními důvody jsou optimalizace výdrže baterie a ochrana soukromí uživatelů. Neomezené spouštění úkolů na pozadí by rychle vybíjelo baterii a mohlo by vést k nadměrnému shromažďování dat bez vědomí uživatele.

Může moje aplikace probudit iPhone z pozadí pro odeslání dat na server?

Ano, pomocí URLSession s konfigurací pro pozadí (URLSessionConfiguration.background). Tato metoda umožňuje dokončit odesílání dat na server, i když je aplikace pozastavena. Nicméně, stále nemůžete řídit frekvenci spouštění úkolů; systém rozhoduje, kdy je vhodné úkol spustit, což může trvat déle než několik sekund.

Získání dat tepové frekvence z Apple Watch v téměř reálném čase a jejich přenos na server je technicky složitý úkol kvůli přísným omezením platformy. Klíčem k úspěchu je využití tréninkových relací, které umožňují nepřetržité sledování senzoru, a následné efektivní využití WatchConnectivity pro přenos dat na iPhone. Synchronizace dat se serverem pak vyžaduje pečlivé zvážení možností pro běh na pozadí na iOS, s vědomím, že skutečně nepřetržité a vysoce frekvenční odesílání dat je na pozadí prakticky nemožné. Vždy pamatujte na dopad na baterii a informujte své uživatele o fungování vaší aplikace.

Chceš-li si přečíst další články podobné jako Tepová frekvence z Apple Watch: Jak na to?, navštiv kategorii Technologie.

Go up