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 мс за умови активного з'єднання. Використовується для дій, що потребують негайної відповіді: запуск тренування, підтвердження платежу, відкриття дверей розумного будинку. Сесія повинна бути активною на обох пристроях — якщо годинник заблоковано або застосунок у фоні, доставка не гарантується.

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 доступна аналогічна функціональність. Навіть без cellular модуля годинник кешує останні дані з телефону та показує їх при відключенні — користувач бачить актуальну на момент останньої синхронізації інформацію.

РежимДаніДоступністьПриклад
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.

Energy-efficient дизайн — 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 — API Android для синхронізації з Wear OS через DataItem та MessageClient
  • Автономна робота — кешування даних дозволяє працювати при відключенні від телефону
  • Енергоспоживання — до 18 годин роботи на Apple Watch, до 24 годин на Wear OS
  • UI для годинника — лаконічний інтерфейс з великими елементами та мінімальним текстом
  • Публікація — watchOS входить у бінар iOS, Wear OS публікується окремо в Google Play

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також