Companion App — aplicația companion pentru dispozitivele purtabile Apple Watch și Wear OS, care funcționează împreună cu aplicația principală pe smartphone. Companion App sincronizează datele prin WatchConnectivity (iOS) sau Wearable Data Layer (Android), afișează notificări pe ceas și poate funcționa autonom. Dezvoltarea se face în Swift pentru watchOS și Kotlin pentru Wear OS. Mai multe pe WatchConnectivity Docs.
Principalele
Companion App — aplicație pentru dispozitivele purtabile Apple Watch sau Wear OS, care vine împreună cu aplicația principală iOS sau Android. Scopul principal este extinderea funcționalității pe încheietură: vizualizarea rapidă a informațiilor, răspunsul la mesaje, controlul muzicii, urmărirea antrenamentelor. Companion App se instalează automat pe ceas la instalarea aplicației principale pe telefon, dacă dezvoltatorul a inclus-o în build.
Arhitectura aplicației companion include două componente: aplicația iOS/Android (principală) și aplicația watchOS/Wear OS (companion). Comunicarea între ele se face prin API-uri sistemice: WatchConnectivity pentru Apple și Wearable Data Layer pentru Google. Datele sunt transmise în fundal prin Bluetooth sau Wi-Fi — utilizatorul nu vede procesul de sincronizare. Aplicația pe ceas poate avea propriul UI, diferit de cel mobil, adaptat pentru ecranul mic.
Tipurile de aplicații companion diferă prin gradul de dependență de telefon. Aplicațiile Mirroring afișează o copie a datelor de pe telefon și nu funcționează fără conexiune. Aplicațiile Decoupled au propria logică, memorează datele în cache și păstrează o parte din funcționalitate la deconectarea de la telefon. Aplicațiile Independent (watchOS 6+ și Wear OS 3+) pot fi instalate fără telefon și funcționează complet autonom cu propriul acces la rețea.
WatchConnectivity — framework-ul Apple pentru comunicarea bidirecțională între iPhone și Apple Watch. Oferă patru mecanisme de transmitere a datelor: Application Context (ultima stare cunoscută), File Transfer (fișiere de orice dimensiune), User Info (dicționare cu livrare garantată) și Interactive Messaging (comunicare bidirecțională în timp real). Sistemul alege automat Bluetooth sau Wi-Fi în funcție de distanță și calitatea semnalului.
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 — singurul mecanism WatchConnectivity cu livrare garantată în timp real. Mesajul este trimis și primește răspuns în 200–500 ms în condiții de conexiune activă. Folosit pentru acțiuni care necesită răspuns imediat: pornirea antrenamentului, confirmarea plății, deschiderea ușii casei inteligente. Sesiunea trebuie să fie activă pe ambele dispozitive — dacă ceasul este blocat sau aplicația în fundal, livrarea nu este garantată.
File Transfer API este destinat volumelor mari de date — imagini, fișiere audio, antrenamente exportate. Fișierele sunt transmise în fundal chiar și când aplicația este închisă. Limitare — până la 10 transferuri simultane în coadă. Application Context — cel mai economic mecanism: transmite doar ultima stare, anulând contextele anterioare netrimise. Ideal pentru sincronizarea setărilor și a stării curente.
Wearable Data Layer — API din Google Play Services pentru sincronizarea datelor între dispozitivul Android și ceasul Wear OS. Oferă trei protocoale: DataItem (sincronizarea perechilor cheie-valoare), MessageClient (mesaje unidirecționale) și ChannelClient (transmiterea în flux a datelor). DataItems se sincronizează automat prin Google Cloud — dacă telefonul nu este disponibil, datele sunt livrate la restabilirea conexiunii.
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 // /antrenament/ritm_cardiac
val data = DataMapItem
.fromDataItem(event.dataItem)
.dataMap
val bpm = data.getInt("bpm")
updateUI(bpm)
}
}
}
}
}
MessageClient — trimite mesaje unidirecționale cu o cale și un tablou de octeți. Folosit pentru comenzi: «Pornește antrenamentul», «Pauză muzică». Mesajul este livrat garantat dacă dispozitivul este conectat. Pentru a primi mesaje pe Wear OS, implementați WearableListenerService și înregistrați-l în manifest. MessageClient nu suportă memorarea automată în cache — dacă ceasul este deconectat, mesajul se pierde.
ChannelClient — protocol pentru date în flux: audio, video, flux continuu de senzori. Deschide un canal bidirecțional prin care se transmit tablouri de octeți. Suportat doar pe Wear OS 2.0+. ChannelClient este util pentru transmiterea audio de pe telefon pe ceas pentru apeluri prin Bluetooth și pentru retransmiterea datelor de la senzorii Bluetooth externi (pulsometru, computer de bicicletă) prin telefon pe ceas.
Funcționarea autonomă — capacitatea aplicației companion de a executa funcții fără conexiune la telefon. Pe watchOS cu modul Cellular, aplicația trimite cereri de rețea direct prin eSIM. Pe Wear OS cu LTE este disponibilă o funcționalitate similară. Chiar și fără modul celular, ceasul memorează în cache ultimele date de pe telefon și le afișează la deconectare — utilizatorul vede informațiile actuale la momentul ultimei sincronizări.
| Mod | Date | Disponibilitate | Exemplu |
|---|---|---|---|
| Online | În direct de pe server/telefon | Completă | Traseu de navigație |
| Cached | Ultimele de pe telefon | Limitată | Lista de contacte |
| Offline | Locale pe ceas | Minimă | Timer, cronometru |
Memorarea în cache a datelor — elementul cheie al funcționării autonome. Aplicația trebuie să salveze ultima stare primită în memoria locală a ceasului. Pe watchOS se folosește UserDefaults sau CoreData, pe Wear OS — Room Database sau DataStore. La restabilirea conexiunii, cache-ul se actualizează prin sincronizare în fundal. Dacă datele sunt mai vechi de 24 de ore, aplicația afișează mesajul «Actualizați conexiunea la telefon».
Wearable UI pentru ecran limitat ceasul are un ecran de 1.5–2 inci — interfața aplicației companion trebuie să fie cât mai concisă. Apple recomandă NavigationView cu o coloană pe watchOS, Google — o listă de carduri pe Wear OS cu degetare pentru navigare. Butoanele trebuie să aibă cel puțin 44pt pentru o atingere confortabilă. Evitați câmpurile de introducere text — folosiți răspunsuri gata făcute, dictare sau rotița Digital Crown.
Design eficient energetic — aplicația companion nu trebuie să descarce ceasul în câteva ore. Folosiți actualizări în fundal cu interval minim. Pe watchOS, WatchConnectivity întrerupe transmisia la baterie scăzută și o reia după încărcare. Pe Wear OS, Wearable Data Layer grupează automat transmisiile mici într-una singură pentru economisirea energiei. Wrist raise — actualizați UI doar când utilizatorul ridică încheietura.
Arhitectura aplicației companion trebuie proiectată ținând cont de posibila pierdere a conexiunii. Folosiți modelul Repository: o singură sursă de date pe telefon se sincronizează cu depozitul local pe ceas. ViewModel-ul pe ceas se abonează la depozitul local și afișează datele independent de starea conexiunii. La restabilirea conexiunii, Repository-ul de pe ceas solicită date prin WatchConnectivity sau Wearable Data Layer și actualizează memoria locală.
class WorkoutRepository constructor(
private val localStorage: WorkoutDao,
private val wearableClient: WearableClient
) {
val workoutFlow: Flow<Workout?> = merge(
localStorage.observeWorkout(),
wearableClient.observeWorkout()
.onEach { localStorage.save(it) }
)
}
Testarea aplicației companion necesită verificare pe un ceas real sau emulator. Xcode suportă simulatorul Apple Watch împreună cu simulatorul iPhone — se poate testa WatchConnectivity fără dispozitive fizice. Android Studio include un emulator Wear OS cu suport Wearable Data Layer. Cazuri de test critice: pierderea conexiunii în timpul transmisiei, baterie scăzută, funcționarea simultană a două aplicații companion și instalarea fără telefon pe un ceas standalone.
Publicarea aplicației companion pe watchOS nu necesită o încărcare separată în App Store — aplicația face parte din binarul aplicației iOS și este oferită automat pentru instalare pe ceas. Pe Wear OS, aplicația companion se publică separat în Google Play, dar se leagă de aplicația principală prin același pachet. App Group pe iOS și sharedUserId pe Android permit aplicației principale și celei companion să folosească un spațiu de stocare comun.
Întrebări frecvente
Companion App necesită o aplicație principală instalată pe iPhone sau Android pentru funcționalitate completă. O aplicație standalone obișnuită pe ceas (de exemplu, busola sau cronometrul) funcționează autonom fără telefon. Companion App sincronizează datele cu telefonul, afișează notificări și permite acțiuni rapide, dar fără telefon pierde o parte din funcții.
WatchConnectivity suportă patru moduri: Application Context pentru transmiterea stării curente cu anularea celei anterioare, File Transfer pentru fișiere de orice dimensiune, User Info pentru dicționare de date cu livrare garantată și Interactive Messaging pentru comunicare bidirecțională în timp real. Datele sunt transmise prin Bluetooth sau Wi-Fi — sistemul alege automat canalul optim.
Da, aplicația companion funcționează autonom — watchOS și Wear OS memorează în cache datele primite de la telefon. Pe ceasul cu modul celular, aplicația trimite cereri direct prin eSIM sau LTE. Datele din cache sunt afișate chiar și în absența conexiunii. La restabilirea conexiunii, cache-ul se actualizează prin sincronizare în fundal.
Cele mai populare categorii: trackere de fitness cu sincronizare antrenamente, aplicații de mesagerie pentru a răspunde la mesaje de pe ceas, navigatoare cu indicații de viraje pe încheietură, playere muzicale pentru controlul redării, sisteme de plată, casă inteligentă pentru controlul dispozitivelor și monitoare medicale pentru puls și tensiune.
Apple Watch asigură până la 18 ore de funcționare cu aplicația companion activă în uz standard. Wear OS — până la 24 de ore. WatchConnectivity este optimizat pentru consum redus de energie: transmiterea datelor se întrerupe la baterie scăzută, iar sincronizarea în masă se efectuează în timpul încărcării ceasului.
Rezumat
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și