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 — 与手机主应用配合使用的可穿戴设备应用
  • WatchConnectivity — 用于 iPhone 和 Apple Watch 之间数据交换的框架
  • Wearable Data Layer — 用于将 Android 应用与 Wear OS 同步的 API
  • 自主运行 — 手表缓存数据并在未连接手机时工作
  • 推送通知 — companion 在手腕上显示来自手机的通知

什么是 Companion App — 可穿戴设备应用?

Companion App — 适用于 Apple Watch 或 Wear OS 可穿戴设备的应用程序,与主 iOS 或 Android 应用一起提供。主要目标是将功能扩展到手腕:快速查看信息、回复消息、控制音乐、跟踪锻炼。如果在构建中包含,Companion App 会在主应用安装到手机时自动安装到手表上。

架构 Companion 应用包括两个组件:iOS/Android 应用(主)和 watchOS/Wear OS 应用(伴侣)。它们之间的通信通过系统 API 进行:Apple 使用 WatchConnectivity,Google 使用 Wearable Data Layer。数据通过蓝牙或 Wi-Fi 在后台传输 — 用户看不到同步过程。手表上的应用可以有自己独立的 UI,与移动端不同,适配小屏幕。

Companion 应用的类型 根据对手机的依赖程度而不同。镜像应用显示来自手机的数据副本,无连接时无法工作。解耦应用有自己的逻辑,缓存数据,并在与手机断开连接时保留部分功能。独立应用(watchOS 6+ 和 Wear OS 3+)可以在没有手机的情况下安装,并完全自主运行,拥有自己的网络访问权限。

WatchConnectivity:iPhone 和 Apple Watch 的同步

WatchConnectivity — Apple 用于 iPhone 和 Apple Watch 之间双向通信的框架。提供四种数据传输机制:Application Context(最后已知状态)、File Transfer(任意大小的文件)、User Info(保证送达的数据字典)和 Interactive Messaging(实时双向通信)。系统根据距离和信号质量自动选择蓝牙或 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 — 来自 Google Play Services 的 API,用于 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 可用于通过蓝牙将音频从手机传输到手表进行通话,以及通过手机将外部蓝牙传感器(心率监测器、自行车电脑)的数据中继到手表。

Companion 应用在手表上的自主运行

自主运行 — Companion 应用在未连接手机的情况下执行功能的能力。在带有蜂窝模块的 watchOS 上,应用直接通过 eSIM 发送网络请求。在带有 LTE 的 Wear OS 上,有类似的功能可用。即使没有蜂窝模块,手表也会缓存来自手机的最新数据,并在断开连接时显示 — 用户看到的是最后一次同步时的最新信息。

模式数据可用性示例
Online来自服务器/手机的实时数据完整导航路线
Cached来自手机的最新数据有限联系人列表
Offline手表本地数据最低计时器、秒表

数据缓存 — 自主运行的关键要素。应用应将最后接收的状态保存到手表的本地存储中。在 watchOS 上使用 UserDefaults 或 CoreData,在 Wear OS 上使用 Room Database 或 DataStore。连接恢复时,缓存通过后台同步更新。如果数据过期超过 24 小时,应用将显示「请更新与手机的连接」提示。

适用于有限屏幕的可穿戴 UI 手表的屏幕为 1.5-2 英寸 — companion 应用的界面应尽可能简洁。Apple 推荐在 watchOS 上使用单列 NavigationView,Google 推荐在 Wear OS 上使用卡片列表配合滑动导航。按钮大小应至少为 44pt 以确保舒适的触摸。避免文本输入字段 — 使用预设回复、语音输入或 Digital Crown 滚轮。

节能设计 — Companion 应用不应在几小时内耗尽手表电池。使用最小间隔的后台更新。在 watchOS 上,WatchConnectivity 在电池电量低时暂停传输,充电后恢复。在 Wear OS 上,Wearable Data Layer 自动将小传输合并为一个以节省能源。抬腕 — 仅在用户抬起手腕时更新 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 包含支持 Wearable Data Layer 的 Wear OS 模拟器。关键测试用例:传输过程中连接丢失、电池电量低、两个 companion 应用同时运行以及在独立手表上无需手机安装。

发布 Companion 应用 在 watchOS 上无需单独上传到 App Store — 该应用包含在 iOS 二进制文件中,并自动提供安装到手表。在 Wear OS 上,companion 应用单独发布在 Google Play 中,但通过相同的包与主应用连接。iOS 上的 App Group 和 Android 上的 sharedUserId 允许主应用和 companion 应用使用共享数据存储。

常见问题

Companion App 与手表上的普通应用有何不同?

Companion App 需要在 iPhone 或 Android 上安装主应用才能获得完整功能。手表上的普通独立应用(例如指南针或秒表)无需手机即可自主运行。Companion App 与手机同步数据、显示通知并允许快速操作,但如果没有手机,会丢失部分功能。

WatchConnectivity 如何在 iPhone 和 Watch 之间传输数据?

WatchConnectivity 支持四种模式:Application Context 用于传输当前状态(取消之前的状态)、File Transfer 用于任意大小的文件、User Info 用于保证送达的数据字典以及 Interactive Messaging 用于实时双向通信。数据通过蓝牙或 Wi-Fi 传输 — 系统自动选择最佳通道。

Companion App 可以在没有互联网的情况下工作吗?

可以,companion 应用可以自主运行 — watchOS 和 Wear OS 会缓存从手机接收的数据。带有蜂窝模块的手表上,应用通过 eSIM 或 LTE 直接发送请求。即使没有连接,缓存的数据也会显示。连接恢复后,缓存通过后台同步更新。

哪些类型的应用最常使用 Companion App?

最受欢迎的类别:带有锻炼同步功能的健身追踪器、用于从手表回复消息的通讯应用、在手腕上提供转弯提示的导航仪、用于控制播放的音乐播放器、支付系统、用于控制设备的智能家居以及用于监测心率和血压的医疗监控器。

Companion App 在手表上消耗多少电量?

Apple Watch 在正常使用下,活跃的 companion 应用可提供长达 18 小时的运行时间。Wear OS — 长达 24 小时。WatchConnectivity 针对低功耗进行了优化:电池电量低时数据传输暂停,批量同步在手表的充电期间执行。

总结

  • Companion App — 与手机主应用配合使用的手表应用
  • WatchConnectivity — 具有四种数据传输模式的 iOS 框架(适用于 Apple Watch)
  • Wearable Data Layer — 通过 DataItem 和 MessageClient 与 Wear OS 同步的 Android API
  • 自主运行 — 数据缓存允许在断开与手机连接时工作
  • 能耗 — 在 Apple Watch 上长达 18 小时,在 Wear OS 上长达 24 小时
  • 手表 UI — 具有大元素和最少文本的简洁界面
  • 发布 — watchOS 包含在 iOS 二进制文件中,Wear OS 单独发布在 Google Play 中

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读