Companion App — какво е, разработка на приложения-компаньони

Автор: IT Sectr Публикувано: 2026-02-16 Време за четене: 9 мин

Companion App — приложение-компаньон за носими устройства Apple Watch и Wear OS, работещо в двойка с основното приложение на смартфона. Companion App синхронизира данни чрез WatchConnectivity (iOS) или Wearable Data Layer (Android), показва известия на часовника и може да изпълнява функции автономно. Разработката се води на Swift за watchOS и Kotlin за Wear OS. Повече на WatchConnectivity Docs.

Основни

  • Companion App — приложение за wearable, работещо с основното приложение на телефона
  • WatchConnectivity — рамка за обмен на данни между iPhone и Apple Watch
  • Wearable Data Layer — API за синхронизиране на Android приложение с Wear OS
  • Автономна работа — часовникът кешира данни и работи без връзка с телефона
  • Push известия — companion показва известия от телефона на китката

Какво е Companion App — приложение за wearable?

Companion App — приложение за носими устройства Apple Watch или Wear OS, което се доставя в двойка с основното iOS или Android приложение. Основната цел е разширяване на функционалността на китката: бърз преглед на информация, отговор на съобщения, управление на музика, проследяване на тренировки. Companion App се инсталира автоматично на часовника при инсталиране на основното приложение на телефона, ако разработчикът го е включил в билда.

Архитектура на companion приложението включва два компонента: iOS/Android приложение (основно) и watchOS/Wear OS приложение (компаньон). Връзката между тях се осъществява чрез системни API: WatchConnectivity за Apple и Wearable Data Layer за Google. Данните се предават на заден план по Bluetooth или Wi-Fi — потребителят не вижда процеса на синхронизация. Приложението на часовника може да има собствен UI, различен от мобилния, адаптиран за малкия екран.

Типове companion приложения се различават по степен на зависимост от телефона. Mirroring приложения показват копие на данните от телефона и не работят без връзка. Decoupled приложения имат собствена логика, кешират данни и запазват част от функционалността при изключване от телефона. Independent приложения (watchOS 6+ и Wear OS 3+) могат да се инсталират без телефон и да работят напълно автономно със собствен мрежов достъп.

WatchConnectivity: синхронизация на iPhone и Apple Watch

WatchConnectivity — рамка на Apple за двупосочна комуникация между iPhone и Apple Watch. Предоставя четири механизма за предаване на данни: Application Context (последно известно състояние), File Transfer (файлове с произволен размер), User Info (речници с гарантирана доставка) и Interactive Messaging (двупосочна комуникация в реално време). Системата избира автоматично Bluetooth или Wi-Fi в зависимост от разстоянието и качеството на сигнала.

swift
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 — единственият механизъм на WatchConnectivity с гарантирана доставка в реално време. Съобщението се изпраща и получава отговор в рамките на 200–500 ms при активна връзка. Използва се за действия, изискващи незабавен отговор: стартиране на тренировка, потвърждение на плащане, отваряне на врата на умния дом. Сесията трябва да е активна и на двете устройства — ако часовникът е заключен или приложението е на заден план, доставката не се гарантира.

File Transfer API е предназначен за големи обеми данни — изображения, аудиофайлове, експортирани тренировки. Файловете се предават на заден план дори при затворено приложение. Ограничение — до 10 едновременни предавания в опашката. Application Context — най-икономичният механизъм: предава само последното състояние, анулирайки предишните неизпратени контексти. Идеален за синхронизация на настройки и текущ статус.

Wearable Data Layer: синхронизация на Android и Wear OS

Wearable Data Layer — API от Google Play Services за синхронизиране на данни между Android устройство и часовник с Wear OS. Предоставя три протокола: DataItem (синхронизация на двойки ключ-стойност), MessageClient (еднопосочни съобщения) и ChannelClient (поточно предаване на данни). DataItems се синхронизират автоматично чрез Google Cloud — ако телефонът не е наличен, данните се доставят при възстановяване на връзката.

kotlin
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 // /тренировка/пулс
                    val data = DataMapItem
                        .fromDataItem(event.dataItem)
                        .dataMap
                    val bpm = data.getInt("bpm")
                    updateUI(bpm)
                }
            }
        }
    }
}

MessageClient — изпраща еднопосочни съобщения с път и байтов масив. Използва се за команди: «Стартирай тренировка», «Паузирай музика». Съобщението се доставя гарантирано, ако устройството е свързано. За получаване на съобщение на Wear OS имплементирайте WearableListenerService и го регистрирайте в манифеста. MessageClient не поддържа автоматично кеширане — ако часовникът е изключен, съобщението се губи.

ChannelClient — протокол за поточни данни: аудио, видео, непрекъснат поток от сензори. Отваря двупосочен канал, по който се предават байтови масиви. Поддържа се само на Wear OS 2.0+. ChannelClient е полезен за предаване на аудио от телефона на часовника за разговори чрез Bluetooth и за ретранслация на данни от външни Bluetooth сензори (пулсомер, велокомпютър) през телефона на часовника.

Автономна работа на companion приложение на часовника

Автономна работа — способност на companion приложението да изпълнява функции без връзка с телефона. На watchOS с Cellular модул приложението изпраща мрежови заявки директно чрез eSIM. На Wear OS с LTE е налична подобна функционалност. Дори без клетъчен модул часовникът кешира последните данни от телефона и ги показва при изключване — потребителят вижда информация, актуална към момента на последната синхронизация.

РежимДанниНаличностПример
OnlineНа живо от сървър/телефонПълнаМаршрут за навигация
CachedПоследни от телефонОграниченаСписък с контакти
OfflineЛокални на часовникаМинималнаТаймер, хронометър

Кеширане на данни — ключов елемент на автономната работа. Приложението трябва да запази последното получено състояние в локалното хранилище на часовника. На watchOS се използва UserDefaults или CoreData, на Wear OS — Room Database или DataStore. При възстановяване на връзката кешът се актуализира чрез фонова синхронизация. Ако данните са остарели с повече от 24 часа, приложението показва съобщение «Обновете връзката с телефона».

Wearable UI за ограничен екран часовникът има екран от 1.5–2 инча — интерфейсът на companion приложението трябва да бъде максимално стегнат. Apple препоръчва NavigationView с една колона на watchOS, Google — списък с карти на Wear OS с плъзгане за навигация. Бутоните трябва да са с размер най-малко 44pt за удобно докосване. Избягвайте полета за въвеждане на текст — използвайте готови отговори, диктовка или колелцето Digital Crown.

Енергийно ефективен дизайн — companion приложението не трябва да разрежда часовника за няколко часа. Използвайте фонови актуализации с минимален интервал. На watchOS WatchConnectivity спира предаването при ниско ниво на батерията и го възобновява след зареждане. На Wear OS Wearable Data Layer автоматично групира малки предавания в едно за пестене на енергия. Wrist raise — актуализирайте UI само когато потребителят повдигне китката.

Най-добри практики за разработка на companion приложения

Архитектурата на companion приложението трябва да бъде проектирана с оглед на възможна загуба на връзка. Използвайте модела Repository: единен източник на данни на телефона се синхронизира с локалното хранилище на часовника. ViewModel на часовника се абонира за локалното хранилище и показва данни независимо от състоянието на връзката. При възстановяване на връзката Repository на часовника изисква данни чрез WatchConnectivity или Wearable Data Layer и актуализира локалното хранилище.

kotlin
class WorkoutRepository constructor(
    private val localStorage: WorkoutDao,
    private val wearableClient: WearableClient
) {
    val workoutFlow: Flow<Workout?> = merge(
        localStorage.observeWorkout(),
        wearableClient.observeWorkout()
            .onEach { localStorage.save(it) }
    )
}

Тестване на companion приложението изисква проверка на реален часовник или емулатор. Xcode поддържа симулатор на Apple Watch в двойка със симулатор на iPhone — WatchConnectivity може да се тества без физически устройства. Android Studio включва емулатор на Wear OS с поддръжка на Wearable Data Layer. Критични тестови случаи: загуба на връзка по време на предаване, ниска батерия, едновременна работа на две companion приложения и инсталиране без телефон на standalone часовник.

Публикуване на companion приложението на watchOS не изисква отделно качване в App Store — приложението влиза в бинарния файл на iOS и автоматично се предлага за инсталиране на часовника. На Wear OS companion приложението се публикува отделно в Google Play, но се свързва с основното приложение чрез същия пакет. App Group на iOS и sharedUserId на Android позволяват на основното и companion приложението да използват общо хранилище за данни.

Често задавани въпроси

Как се различава Companion App от обикновеното приложение на часовника?

Companion App изисква инсталирано основно приложение на iPhone или Android за пълна функционалност. Обикновеното standalone приложение на часовника (например компас или хронометър) работи автономно без телефон. Companion App синхронизира данни с телефона, показва известия и позволява бързи действия, но без телефон губи част от функциите.

Как WatchConnectivity предава данни между iPhone и Watch?

WatchConnectivity поддържа четири режима: Application Context за предаване на текущо състояние с отмяна на предишното, File Transfer за файлове с произволен размер, User Info за речници с данни с гарантирана доставка и Interactive Messaging за двупосочна комуникация в реално време. Данните се предават по Bluetooth или Wi-Fi — системата избира оптималния канал автоматично.

Може ли Companion App да работи без интернет?

Да, companion приложението работи автономно — watchOS и Wear OS кешират данни, получени от телефона. На часовник с клетъчен модул приложението изпраща заявки директно чрез eSIM или LTE. Кешираните данни се показват дори при липса на връзка. При възстановяване на връзката кешът се актуализира чрез фонова синхронизация.

Какви типове приложения най-често използват Companion App?

Най-популярните категории: фитнес тракери със синхронизация на тренировки, месинджъри за отговор на съобщения от часовника, навигатори с указания за завои на китката, музикални плейъри за управление на възпроизвеждането, платежни системи, умен дом за управление на устройства и медицински монитори за пулс и кръвно налягане.

Колко енергия консумира Companion App на часовника?

Apple Watch осигурява до 18 часа работа с активно companion приложение при стандартна употреба. Wear OS — до 24 часа. WatchConnectivity е оптимизиран за ниска консумация на енергия: предаването на данни се спира при ниско ниво на батерията, а масовата синхронизация се извършва по време на зареждане на часовника.

Резюме

  • Companion App — приложение за часовник, работещо в двойка с основното приложение на телефона
  • WatchConnectivity — iOS рамка с четири режима за предаване на данни на Apple Watch
  • Wearable Data Layer — Android API за синхронизация с Wear OS чрез DataItem и MessageClient
  • Автономна работа — кеширането на данни позволява работа при изключване от телефона
  • Консумация на енергия — до 18 часа работа на Apple Watch, до 24 часа на Wear OS
  • UI за часовник — стегнат интерфейс с големи елементи и минимален текст
  • Публикуване — watchOS влиза в бинарния файл на iOS, Wear OS се публикува отделно в Google Play

Ще разработим мобилно приложение под ключ

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също