Companion App — aplikace-doprovod pro nositelná zařízení Apple Watch a Wear OS, která pracuje v páru s hlavní aplikací na smartphonu. Companion App synchronizuje data přes WatchConnectivity (iOS) nebo Wearable Data Layer (Android), zobrazuje oznámení na hodinkách a může fungovat autonomně. Vývoj probíhá ve Swift pro watchOS a Kotlin pro Wear OS. Více na WatchConnectivity Docs.
Hlavní
Companion App — aplikace pro nositelná zařízení Apple Watch nebo Wear OS, která je dodávána v páru s hlavní iOS nebo Android aplikací. Hlavním cílem je rozšíření funkcionality na zápěstí: rychlé prohlížení informací, odpovídání na zprávy, ovládání hudby, sledování tréninků. Companion App se automaticky nainstaluje na hodinky při instalaci hlavní aplikace na telefon, pokud ji vývojář zahrnul do buildu.
Architektura companion aplikace zahrnuje dvě komponenty: iOS/Android aplikaci (hlavní) a watchOS/Wear OS aplikaci (doprovod). Komunikace mezi nimi probíhá prostřednictvím systémových API: WatchConnectivity pro Apple a Wearable Data Layer pro Google. Data jsou přenášena na pozadí přes Bluetooth nebo Wi-Fi — uživatel nevidí proces synchronizace. Aplikace na hodinkách může mít vlastní UI, odlišné od mobilního, přizpůsobené malé obrazovce.
Typy companion aplikací se liší mírou závislosti na telefonu. Mirroring aplikace zobrazují kopii dat z telefonu a bez připojení nefungují. Decoupled aplikace mají vlastní logiku, ukládají data do mezipaměti a při odpojení od telefonu zachovávají část funkcionality. Independent aplikace (watchOS 6+ a Wear OS 3+) lze nainstalovat bez telefonu a pracují zcela autonomně s vlastním přístupem k síti.
WatchConnectivity — Apple framework pro obousměrnou komunikaci mezi iPhone a Apple Watch. Poskytuje čtyři mechanismy přenosu dat: Application Context (poslední známý stav), File Transfer (soubory libovolné velikosti), User Info (slovníky s garantovaným doručením) a Interactive Messaging (obousměrná komunikace v reálném čase). Systém automaticky volí Bluetooth nebo Wi-Fi v závislosti na vzdálenosti a kvalitě signálu.
import WatchConnectivity
class PhoneSessionManager: NSObject, WCSessionDelegate {
func activateSession() {
WCSession.default.delegate = self
WCSession.default.activate()
}
func sendWorkoutData(_ data: WorkoutData) {
let dict = ["heartRate": data.heartRate,
"calories": data.calories] as [String: Any]
WCSession.default.transferUserInfo(dict)
}
func session(_: WCSession,
didReceiveUserInfo: [String: Any]) {
DispatchQueue.main.async {
NotificationCenter.default.post(
name: .workoutDataReceived,
object: didReceiveUserInfo)
}
}
}
Interactive Messaging — jediný mechanismus WatchConnectivity s garantovaným doručením v reálném čase. Zpráva je odeslána a obdrží odpověď během 200–500 ms při aktivním připojení. Používá se pro akce vyžadující okamžitou odezvu: spuštění tréninku, potvrzení platby, otevření dveří chytré domácnosti. Relace musí být aktivní na obou zařízeních — pokud jsou hodinky zamknuté nebo je aplikace na pozadí, doručení není garantováno.
File Transfer API je určeno pro velké objemy dat — obrázky, audio soubory, exportované tréninky. Soubory jsou přenášeny na pozadí i při zavřené aplikaci. Omezení — až 10 současných přenosů ve frontě. Application Context — nejekonomičtější mechanismus: přenáší pouze poslední stav a ruší předchozí neodeslané kontexty. Ideální pro synchronizaci nastavení a aktuálního stavu.
Wearable Data Layer — API z Google Play Services pro synchronizaci dat mezi Android zařízením a Wear OS hodinkami. Poskytuje tři protokoly: DataItem (synchronizace párů klíč-hodnota), MessageClient (jednosměrné zprávy) a ChannelClient (streamování dat). DataItems se automaticky synchronizují přes Google Cloud — pokud telefon není dostupný, data jsou doručena při obnovení připojení.
class WearableSyncService : WearableListenerService() {
override fun onDataChanged(dataEvents: DataEventBuffer) {
dataEvents.forEach { event ->
when (event.type) {
DataEvent.TYPE_CHANGED -> {
val uri = event.dataItem.uri
val path = uri.path // /cvičení/tep
val data = DataMapItem
.fromDataItem(event.dataItem)
.dataMap
val bpm = data.getInt("bpm")
updateUI(bpm)
}
}
}
}
}
MessageClient — odesílá jednosměrné zprávy s cestou a polem bajtů. Používá se pro příkazy: «Spustit trénink», «Pozastavit hudbu». Zpráva je doručena garantovaně, pokud je zařízení připojeno. Pro příjem zprávy na Wear OS implementujte WearableListenerService a zaregistrujte jej v manifestu. MessageClient nepodporuje automatické ukládání do mezipaměti — pokud jsou hodinky odpojeny, zpráva se ztratí.
ChannelClient — protokol pro streamovaná data: audio, video, nepřetržitý tok senzorů. Otevírá obousměrný kanál pro přenos polí bajtů. Podporován pouze na Wear OS 2.0+. ChannelClient je užitečný pro přenos audia z telefonu na hodinky pro hovory přes Bluetooth a pro retransmisi dat z externích Bluetooth senzorů (měřič tepu, cyklistický počítač) přes telefon na hodinky.
Autonomní provoz — schopnost companion aplikace vykonávat funkce bez připojení k telefonu. Na watchOS s Cellular modulem aplikace odesílá síťové požadavky přímo přes eSIM. Na Wear OS s LTE je k dispozici podobná funkcionalita. I bez mobilního modulu hodinky ukládají do mezipaměti poslední data z telefonu a zobrazují je při odpojení — uživatel vidí informace aktuální v okamžiku poslední synchronizace.
| Režim | Data | Dostupnost | Příklad |
|---|---|---|---|
| Online | Živá ze serveru/telefonu | Plná | Trasa navigace |
| Cached | Poslední z telefonu | Omezená | Seznam kontaktů |
| Offline | Lokální na hodinkách | Minimální | Časovač, stopky |
Ukládání dat do mezipaměti — klíčový prvek autonomního provozu. Aplikace by měla ukládat poslední přijatý stav do lokálního úložiště hodinek. Na watchOS se používá UserDefaults nebo CoreData, na Wear OS — Room Database nebo DataStore. Při obnovení připojení se mezipaměť aktualizuje synchronizací na pozadí. Pokud jsou data starší než 24 hodin, aplikace zobrazí zprávu «Aktualizujte připojení k telefonu».
Wearable UI pro omezenou obrazovku hodinky mají obrazovku 1.5–2 palce — rozhraní companion aplikace by mělo být maximálně stručné. Apple doporučuje NavigationView s jedním sloupcem na watchOS, Google — seznam karet na Wear OS s přejetím pro navigaci. Tlačítka by měla mít velikost alespoň 44pt pro pohodlný dotyk. Vyhněte se textovým vstupním polím — používejte hotové odpovědi, diktování nebo kolečko Digital Crown.
Energeticky úsporný design — companion aplikace by neměla vybít hodinky během několika hodin. Používejte aktualizace na pozadí s minimálním intervalem. Na watchOS WatchConnectivity pozastavuje přenos při nízké baterii a obnovuje po nabití. Na Wear OS Wearable Data Layer automaticky seskupuje malé přenosy do jednoho pro úsporu energie. Wrist raise — aktualizujte UI pouze při zvednutí zápěstí uživatelem.
Architektura companion aplikace by měla být navržena s ohledem na možnou ztrátu spojení. Použijte vzor Repository: jediný zdroj dat na telefonu se synchronizuje s lokálním repozitářem na hodinkách. ViewModel na hodinkách se přihlašuje k odběru lokálního repozitáře a zobrazuje data nezávisle na stavu připojení. Při obnovení spojení Repository na hodinkách vyžádá data přes WatchConnectivity nebo Wearable Data Layer a aktualizuje lokální úložiště.
class WorkoutRepository constructor(
private val localStorage: WorkoutDao,
private val wearableClient: WearableClient
) {
val workoutFlow: Flow<Workout?> = merge(
localStorage.observeWorkout(),
wearableClient.observeWorkout()
.onEach { localStorage.save(it) }
)
}
Testování companion aplikace vyžaduje ověření na skutečných hodinkách nebo emulátoru. Xcode podporuje simulátor Apple Watch v páru se simulátorem iPhone — WatchConnectivity lze testovat bez fyzických zařízení. Android Studio zahrnuje emulátor Wear OS s podporou Wearable Data Layer. Kritické testovací případy: ztráta spojení během přenosu, nízká baterie, současný provoz dvou companion aplikací a instalace bez telefonu na standalone hodinkách.
Publikování companion aplikace na watchOS nevyžaduje samostatné nahrání do App Store — aplikace je součástí binárního souboru iOS a je automaticky nabízena k instalaci na hodinky. Na Wear OS se companion aplikace publikuje samostatně v Google Play, ale propojuje se s hlavní aplikací přes stejný balíček. App Group na iOS a sharedUserId na Android umožňují hlavní a companion aplikaci používat společné úložiště dat.
Často kladené otázky
Companion App vyžaduje nainstalovanou hlavní aplikaci na iPhone nebo Android pro plnou funkcionalitu. Běžná standalone aplikace na hodinkách (např. kompas nebo stopky) funguje autonomně bez telefonu. Companion App synchronizuje data s telefonem, zobrazuje oznámení a umožňuje rychlé akce, ale bez telefonu ztrácí část funkcí.
WatchConnectivity podporuje čtyři režimy: Application Context pro přenos aktuálního stavu se zrušením předchozího, File Transfer pro soubory libovolné velikosti, User Info pro datové slovníky s garantovaným doručením a Interactive Messaging pro obousměrnou komunikaci v reálném čase. Data jsou přenášena přes Bluetooth nebo Wi-Fi — systém automaticky volí optimální kanál.
Ano, companion aplikace funguje autonomně — watchOS a Wear OS ukládají do mezipaměti data získaná z telefonu. Na hodinkách s mobilním modulem aplikace odesílá požadavky přímo přes eSIM nebo LTE. Data v mezipaměti se zobrazují i bez připojení. Při obnovení připojení se mezipaměť aktualizuje synchronizací na pozadí.
Nejoblíbenější kategorie: fitness trackery se synchronizací tréninků, messengery pro odpovídání na zprávy z hodinek, navigátory s navigačními pokyny na zápěstí, hudební přehrávače pro ovládání přehrávání, platební systémy, chytrá domácnost pro ovládání zařízení a lékařské monitory pro tep a tlak.
Apple Watch poskytují až 18 hodin provozu s aktivní companion aplikací při běžném používání. Wear OS — až 24 hodin. WatchConnectivity je optimalizován pro nízkou spotřebu energie: přenos dat se pozastavuje při nízké baterii a hromadná synchronizace se provádí během nabíjení hodinek.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také