Companion App — aplikasi pendamping untuk perangkat wearable Apple Watch dan Wear OS, yang bekerja bersama aplikasi utama di ponsel pintar. Companion App menyinkronkan data melalui WatchConnectivity (iOS) atau Wearable Data Layer (Android), menampilkan notifikasi di jam tangan, dan dapat berfungsi secara mandiri. Pengembangan dilakukan dalam Swift untuk watchOS dan Kotlin untuk Wear OS. Selengkapnya di WatchConnectivity Docs.
Poin Utama
Companion App — aplikasi untuk perangkat wearable Apple Watch atau Wear OS, yang disertakan bersama aplikasi utama iOS atau Android. Tujuan utama adalah memperluas fungsionalitas ke pergelangan tangan: melihat informasi dengan cepat, membalas pesan, mengontrol musik, melacak latihan. Companion App secara otomatis terinstal di jam tangan saat menginstal aplikasi utama di ponsel, jika pengembang menyertakannya dalam build.
Arsitektur aplikasi companion terdiri dari dua komponen: aplikasi iOS/Android (utama) dan aplikasi watchOS/Wear OS (pendamping). Komunikasi antara keduanya dilakukan melalui API sistem: WatchConnectivity untuk Apple dan Wearable Data Layer untuk Google. Data dikirim di latar belakang melalui Bluetooth atau Wi-Fi — pengguna tidak melihat proses sinkronisasi. Aplikasi di jam tangan dapat memiliki UI sendiri, berbeda dari aplikasi seluler, yang disesuaikan dengan layar kecil.
Jenis aplikasi companion berbeda dalam tingkat ketergantungan pada ponsel. Aplikasi Mirroring menampilkan salinan data dari ponsel dan tidak berfungsi tanpa koneksi. Aplikasi Decoupled memiliki logika sendiri, menyimpan data cache, dan mempertahankan sebagian fungsionalitas saat terputus dari ponsel. Aplikasi Independent (watchOS 6+ dan Wear OS 3+) dapat diinstal tanpa ponsel dan berfungsi sepenuhnya mandiri dengan akses jaringan sendiri.
WatchConnectivity — framework Apple untuk komunikasi dua arah antara iPhone dan Apple Watch. Menyediakan empat mekanisme pengiriman data: Application Context (status terakhir yang diketahui), File Transfer (file ukuran berapa pun), User Info (kamus dengan pengiriman terjamin) dan Interactive Messaging (komunikasi dua arah waktu nyata). Sistem memilih Bluetooth atau Wi-Fi secara otomatis tergantung jarak dan kualitas sinyal.
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 — satu-satunya mekanisme WatchConnectivity dengan pengiriman terjamin waktu nyata. Pesan dikirim dan mendapat respons dalam 200–500 ms dengan koneksi aktif. Digunakan untuk tindakan yang memerlukan respons segera: memulai latihan, mengonfirmasi pembayaran, membuka pintu rumah pintar. Sesi harus aktif di kedua perangkat — jika jam tangan terkunci atau aplikasi di latar belakang, pengiriman tidak terjamin.
File Transfer API ditujukan untuk data volume besar — gambar, file audio, latihan yang diekspor. File dikirim di latar belakang bahkan saat aplikasi ditutup. Batasan — hingga 10 transfer bersamaan dalam antrean. Application Context — mekanisme paling hemat: hanya mengirim status terakhir, membatalkan konteks sebelumnya yang belum terkirim. Ideal untuk sinkronisasi pengaturan dan status saat ini.
Wearable Data Layer — API dari Google Play Services untuk sinkronisasi data antara perangkat Android dan jam tangan Wear OS. Menyediakan tiga protokol: DataItem (sinkronisasi pasangan kunci-nilai), MessageClient (pesan satu arah) dan ChannelClient (pengiriman data streaming). DataItems disinkronkan secara otomatis melalui Google Cloud — jika ponsel tidak tersedia, data dikirim saat koneksi pulih.
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 // /olahraga/detak_jantung
val data = DataMapItem
.fromDataItem(event.dataItem)
.dataMap
val bpm = data.getInt("bpm")
updateUI(bpm)
}
}
}
}
}
MessageClient — mengirim pesan satu arah dengan jalur dan array byte. Digunakan untuk perintah: «Mulai latihan», «Jeda musik». Pesan terkirim secara terjamin jika perangkat terhubung. Untuk menerima pesan di Wear OS, implementasikan WearableListenerService dan daftarkan di manifes. MessageClient tidak mendukung cache otomatis — jika jam tangan terputus, pesan akan hilang.
ChannelClient — protokol untuk data streaming: audio, video, aliran sensor berkelanjutan. Membuka saluran dua arah untuk mengirim array byte. Hanya didukung di Wear OS 2.0+. ChannelClient berguna untuk mengirim audio dari ponsel ke jam tangan untuk panggilan melalui Bluetooth dan untuk menyampaikan data dari sensor Bluetooth eksternal (pemantau detak jantung, komputer sepeda) melalui ponsel ke jam tangan.
Operasi mandiri — kemampuan aplikasi companion untuk menjalankan fungsi tanpa koneksi ke ponsel. Di watchOS dengan modul Cellular, aplikasi mengirim permintaan jaringan langsung melalui eSIM. Di Wear OS dengan LTE, fungsionalitas serupa tersedia. Bahkan tanpa modul seluler, jam tangan menyimpan cache data terakhir dari ponsel dan menampilkannya saat terputus — pengguna melihat informasi yang terkini pada saat sinkronisasi terakhir.
| Mode | Data | Ketersediaan | Contoh |
|---|---|---|---|
| Online | Langsung dari server/telepon | Penuh | Rute navigasi |
| Cached | Terakhir dari telepon | Terbatas | Daftar kontak |
| Offline | Lokal di jam tangan | Minimal | Timer, stopwatch |
Cache data — elemen kunci operasi mandiri. Aplikasi harus menyimpan status terakhir yang diterima di penyimpanan lokal jam tangan. Di watchOS menggunakan UserDefaults atau CoreData, di Wear OS — Room Database atau DataStore. Saat koneksi pulih, cache diperbarui dengan sinkronisasi latar belakang. Jika data sudah kedaluwarsa lebih dari 24 jam, aplikasi menampilkan pesan «Perbarui koneksi ke ponsel».
Wearable UI untuk layar terbatas jam tangan memiliki layar 1.5–2 inci — antarmuka aplikasi companion harus sesederhana mungkin. Apple merekomendasikan NavigationView satu kolom di watchOS, Google — daftar kartu di Wear OS dengan sapuan untuk navigasi. Tombol harus berukuran setidaknya 44pt untuk sentuhan yang nyaman. Hindari kolom input teks — gunakan jawaban siap pakai, dikte, atau roda Digital Crown.
Desain hemat energi — aplikasi companion tidak boleh menguras baterai jam tangan dalam beberapa jam. Gunakan pembaruan latar belakang dengan interval minimal. Di watchOS, WatchConnectivity menghentikan transmisi saat baterai rendah dan melanjutkan setelah pengisian daya. Di Wear OS, Wearable Data Layer secara otomatis mengelompokkan transmisi kecil menjadi satu untuk menghemat energi. Wrist raise — perbarui UI hanya saat pengguna mengangkat pergelangan tangan.
Arsitektur aplikasi companion harus dirancang dengan mempertimbangkan kemungkinan kehilangan koneksi. Gunakan pola Repository: satu sumber data di ponsel disinkronkan dengan repositori lokal di jam tangan. ViewModel di jam tangan berlangganan ke repositori lokal dan menampilkan data terlepas dari status koneksi. Saat koneksi pulih, Repository di jam tangan meminta data melalui WatchConnectivity atau Wearable Data Layer dan memperbarui penyimpanan lokal.
class WorkoutRepository constructor(
private val localStorage: WorkoutDao,
private val wearableClient: WearableClient
) {
val workoutFlow: Flow<Workout?> = merge(
localStorage.observeWorkout(),
wearableClient.observeWorkout()
.onEach { localStorage.save(it) }
)
}
Pengujian aplikasi companion memerlukan pengujian pada jam tangan asli atau emulator. Xcode mendukung simulator Apple Watch bersama simulator iPhone — WatchConnectivity dapat diuji tanpa perangkat fisik. Android Studio menyertakan emulator Wear OS dengan dukungan Wearable Data Layer. Kasus uji kritis: kehilangan koneksi selama transmisi, baterai rendah, pengoperasian dua aplikasi companion secara bersamaan, dan instalasi tanpa ponsel di jam tangan standalone.
Publikasi aplikasi companion di watchOS tidak memerlukan unggahan terpisah ke App Store — aplikasi termasuk dalam biner iOS dan secara otomatis ditawarkan untuk diinstal di jam tangan. Di Wear OS, aplikasi companion dipublikasikan secara terpisah di Google Play, tetapi terhubung ke aplikasi utama melalui paket yang sama. App Group di iOS dan sharedUserId di Android memungkinkan aplikasi utama dan companion menggunakan penyimpanan data bersama.
Pertanyaan yang Sering Diajukan
Companion App memerlukan aplikasi utama yang terinstal di iPhone atau Android untuk fungsionalitas penuh. Aplikasi standalone biasa di jam tangan (misalnya kompas atau stopwatch) berfungsi mandiri tanpa ponsel. Companion App menyinkronkan data dengan ponsel, menampilkan notifikasi, dan memungkinkan tindakan cepat, tetapi tanpa ponsel akan kehilangan sebagian fungsi.
WatchConnectivity mendukung empat mode: Application Context untuk mengirim status saat ini dengan membatalkan status sebelumnya, File Transfer untuk file ukuran berapa pun, User Info untuk kamus data dengan pengiriman terjamin, dan Interactive Messaging untuk komunikasi dua arah waktu nyata. Data dikirim melalui Bluetooth atau Wi-Fi — sistem memilih saluran optimal secara otomatis.
Ya, aplikasi companion berfungsi secara mandiri — watchOS dan Wear OS menyimpan cache data yang diterima dari ponsel. Di jam tangan dengan modul seluler, aplikasi mengirim permintaan langsung melalui eSIM atau LTE. Data dalam cache ditampilkan bahkan tanpa koneksi. Saat koneksi pulih, cache diperbarui dengan sinkronisasi latar belakang.
Kategori paling populer: pelacak kebugaran dengan sinkronisasi latihan, aplikasi pesan untuk membalas pesan dari jam tangan, navigator dengan petunjuk arah belok di pergelangan tangan, pemutar musik untuk mengontrol pemutaran, sistem pembayaran, rumah pintar untuk mengontrol perangkat, dan monitor medis untuk detak jantung dan tekanan darah.
Apple Watch memberikan hingga 18 jam kerja dengan aplikasi companion aktif dalam penggunaan standar. Wear OS — hingga 24 jam. WatchConnectivity dioptimalkan untuk konsumsi daya rendah: transmisi data dihentikan saat baterai rendah, dan sinkronisasi massal dilakukan saat jam tangan sedang diisi daya.
Ringkasan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga