Companion App — kasamang app para sa mga naisusuot na device na Apple Watch at Wear OS, na gumagana kasama ng pangunahing app sa smartphone. Companion App nagsi-sync ng data sa pamamagitan ng WatchConnectivity (iOS) o Wearable Data Layer (Android), nagpapakita ng mga notification sa relo, at maaaring gumana nang awtonomo. Ang pag-develop ay ginagawa sa Swift para sa watchOS at Kotlin para sa Wear OS. Higit pa sa WatchConnectivity Docs.
Mga Pangunahing
Companion App — app para sa mga naisusuot na device na Apple Watch o Wear OS, na kasama ng pangunahing iOS o Android app. Ang pangunahing layunin ay palawakin ang functionality sa pulsuhan: mabilis na pagtingin ng impormasyon, pagsagot sa mga mensahe, pagkontrol ng musika, pagsubaybay sa mga ehersisyo. Awtomatikong nag-i-install ang Companion App sa relo kapag nag-install ng pangunahing app sa telepono, kung isinama ito ng developer sa build.
Arkitektura ng companion app ay binubuo ng dalawang bahagi: iOS/Android app (pangunahing) at watchOS/Wear OS app (kasama). Ang komunikasyon sa pagitan ng mga ito ay sa pamamagitan ng system API: WatchConnectivity para sa Apple at Wearable Data Layer para sa Google. Ang data ay ipinapadala sa background sa pamamagitan ng Bluetooth o Wi-Fi — hindi nakikita ng user ang proseso ng pag-sync. Ang app sa relo ay maaaring magkaroon ng sariling UI, naiiba sa mobile, na inangkop para sa maliit na screen.
Mga uri ng companion app ay nagkakaiba ayon sa antas ng pag-asa sa telepono. Mirroring app nagpapakita ng kopya ng data mula sa telepono at hindi gumagana nang walang koneksyon. Decoupled app ay may sariling lohika, nag-cache ng data, at nagpapanatili ng bahagi ng functionality kapag nadiskonekta mula sa telepono. Independent app (watchOS 6+ at Wear OS 3+) ay maaaring i-install nang walang telepono at gumana nang ganap na awtonomo na may sariling access sa network.
WatchConnectivity — framework ng Apple para sa dalawang-direksyong komunikasyon sa pagitan ng iPhone at Apple Watch. Nagbibigay ng apat na mekanismo ng paglilipat ng data: Application Context (huling alam na estado), File Transfer (mga file ng anumang laki), User Info (mga diksyunaryo na may garantisadong paghahatid) at Interactive Messaging (dalawang-direksyong komunikasyon sa real-time). Awtomatikong pumipili ang system ng Bluetooth o Wi-Fi batay sa distansya at kalidad ng signal.
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 — ang tanging mekanismo ng WatchConnectivity na may garantisadong paghahatid sa real-time. Ang mensahe ay ipinapadala at tumatanggap ng tugon sa loob ng 200–500 ms na may aktibong koneksyon. Ginagamit para sa mga aksyon na nangangailangan ng agarang tugon: pagsisimula ng ehersisyo, pagkumpirma ng pagbabayad, pagbubukas ng pinto ng smart home. Ang session ay dapat aktibo sa parehong device — kung naka-lock ang relo o ang app ay nasa background, hindi garantisado ang paghahatid.
File Transfer API ay para sa malalaking volume ng data — mga larawan, audio file, na-export na ehersisyo. Ang mga file ay ipinapadala sa background kahit na sarado ang app. Limitasyon — hanggang 10 sabay-sabay na paglilipat sa pila. Application Context — ang pinaka-ekonomikong mekanismo: ipinapadala lamang ang huling estado, kinakansela ang mga naunang hindi naipadalang konteksto. Tamang-tama para sa pag-sync ng mga setting at kasalukuyang status.
Wearable Data Layer — API mula sa Google Play Services para sa pag-sync ng data sa pagitan ng Android device at Wear OS relo. Nagbibigay ng tatlong protocol: DataItem (pag-sync ng key-value pairs), MessageClient (isang-direksyong mensahe) at ChannelClient (streaming data transfer). Awtomatikong nag-si-sync ang DataItems sa pamamagitan ng Google Cloud — kung hindi available ang telepono, ihahatid ang data kapag naibalik ang koneksyon.
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 // /ehersisyo/tibok_ng_puso
val data = DataMapItem
.fromDataItem(event.dataItem)
.dataMap
val bpm = data.getInt("bpm")
updateUI(bpm)
}
}
}
}
}
MessageClient — nagpapadala ng isang-direksyong mensahe na may path at byte array. Ginagamit para sa mga utos: «Simulan ang ehersisyo», «I-pause ang musika». Garantisadong maihahatid ang mensahe kung nakakonekta ang device. Para makatanggap ng mensahe sa Wear OS, i-implement ang WearableListenerService at irehistro ito sa manifest. Hindi sinusuportahan ng MessageClient ang automatic caching — kung nadiskonekta ang relo, mawawala ang mensahe.
ChannelClient — protocol para sa streaming data: audio, video, tuloy-tuloy na stream ng mga sensor. Nagbubukas ng dalawang-direksyong channel para sa pagpapadala ng mga byte array. Tanging sa Wear OS 2.0+ sinusuportahan. Ang ChannelClient ay kapaki-pakinabang para sa pagpapadala ng audio mula sa telepono patungo sa relo para sa mga tawag sa pamamagitan ng Bluetooth at para sa pag-relay ng data mula sa external na Bluetooth sensor (heart rate monitor, bike computer) sa pamamagitan ng telepono patungo sa relo.
Awtonomong operasyon — kakayahan ng companion app na magsagawa ng mga function nang walang koneksyon sa telepono. Sa watchOS na may Cellular module, ang app ay nagpapadala ng network request nang direkta sa pamamagitan ng eSIM. Sa Wear OS na may LTE, available ang katulad na functionality. Kahit walang cellular module, nag-cache ang relo ng huling data mula sa telepono at ipinapakita ang mga ito kapag nadiskonekta — nakikita ng user ang impormasyong napapanahon sa oras ng huling pag-sync.
| Mode | Data | Availability | Halimbawa |
|---|---|---|---|
| Online | Live mula sa server/telepono | Buong | Ruta ng nabigasyon |
| Cached | Huling mula sa telepono | Limitado | Listahan ng contact |
| Offline | Lokal sa relo | Minimal | Timer, stopwatch |
Pag-cache ng data — pangunahing elemento ng awtonomong operasyon. Dapat i-save ng app ang huling natanggap na estado sa lokal na imbakan ng relo. Sa watchOS ginagamit ang UserDefaults o CoreData, sa Wear OS — Room Database o DataStore. Kapag naibalik ang koneksyon, ina-update ang cache sa pamamagitan ng background sync. Kung ang data ay luma nang higit sa 24 na oras, nagpapakita ang app ng mensaheng «I-update ang koneksyon sa telepono».
Wearable UI para sa limitadong screen ang relo ay may screen na 1.5–2 pulgada — ang interface ng companion app ay dapat maging maksimong maikli. Inirerekomenda ng Apple ang NavigationView na may isang column sa watchOS, Google — listahan ng mga card sa Wear OS na may swipe para sa nabigasyon. Ang mga button ay dapat hindi bababa sa 44pt ang laki para sa komportableng pagpindot. Iwasan ang mga text input field — gumamit ng mga handa na sagot, dikta, o Digital Crown wheel.
Disenyong matipid sa enerhiya — hindi dapat maubos ng companion app ang baterya ng relo sa ilang oras. Gumamit ng background updates na may minimal na interval. Sa watchOS, itinitigil ng WatchConnectivity ang transmission kapag mababa ang baterya at ipinagpatuloy pagkatapos mag-charge. Sa Wear OS, awtomatikong pinagsasama-sama ng Wearable Data Layer ang maliliit na transmission sa isa para makatipid ng enerhiya. Wrist raise — i-update ang UI kapag itinaas lang ng user ang pulsuhan.
Arkitektura ng companion app ay dapat idisenyo na isinasaalang-alang ang posibleng pagkawala ng koneksyon. Gamitin ang pattern ng Repository: isang pinagmumulan ng data sa telepono na nag-si-sync sa lokal na repository sa relo. Ang ViewModel sa relo ay nag-subscribe sa lokal na repository at nagpapakita ng data nang hindi nakadepende sa estado ng koneksyon. Kapag naibalik ang koneksyon, humihiling ang Repository sa relo ng data sa pamamagitan ng WatchConnectivity o Wearable Data Layer at ina-update ang lokal na imbakan.
class WorkoutRepository constructor(
private val localStorage: WorkoutDao,
private val wearableClient: WearableClient
) {
val workoutFlow: Flow<Workout?> = merge(
localStorage.observeWorkout(),
wearableClient.observeWorkout()
.onEach { localStorage.save(it) }
)
}
Pagsubok ng companion app ay nangangailangan ng pag-verify sa tunay na relo o emulator. Sinusuportahan ng Xcode ang Apple Watch simulator kasama ng iPhone simulator — maaaring subukan ang WatchConnectivity nang walang pisikal na device. Ang Android Studio ay may kasamang Wear OS emulator na may suporta sa Wearable Data Layer. Mga kritikal na test case: pagkawala ng koneksyon sa panahon ng transmission, mababang baterya, sabay-sabay na operasyon ng dalawang companion app, at pag-install nang walang telepono sa standalone na relo.
Pag-publish ng companion app sa watchOS ay hindi nangangailangan ng hiwalay na pag-upload sa App Store — ang app ay kasama sa binary ng iOS at awtomatikong inaalok para i-install sa relo. Sa Wear OS, ang companion app ay nai-publish nang hiwalay sa Google Play, ngunit naka-link sa pangunahing app sa pamamagitan ng parehong package. Ang App Group sa iOS at sharedUserId sa Android ay nagbibigay-daan sa pangunahing at companion app na gumamit ng magkabahaging imbakan ng data.
Mga Madalas Itanong
Ang Companion App ay nangangailangan ng naka-install na pangunahing app sa iPhone o Android para sa buong functionality. Ang ordinaryong standalone app sa relo (hal. compass o stopwatch) ay gumagana nang awtonomo nang walang telepono. Ang Companion App ay nag-si-sync ng data sa telepono, nagpapakita ng mga notification, at nagbibigay-daan sa mabilis na aksyon, ngunit walang telepono ay nawawalan ng bahagi ng function.
Sinusuportahan ng WatchConnectivity ang apat na mode: Application Context para sa pagpapadala ng kasalukuyang estado na kinakansela ang nauna, File Transfer para sa mga file ng anumang laki, User Info para sa mga diksyunaryo ng data na may garantisadong paghahatid, at Interactive Messaging para sa dalawang-direksyong komunikasyon sa real-time. Ang data ay ipinapadala sa pamamagitan ng Bluetooth o Wi-Fi — awtomatikong pinipili ng system ang pinakamainam na channel.
Oo, ang companion app ay gumagana nang awtonomo — nag-cache ang watchOS at Wear OS ng data na natanggap mula sa telepono. Sa relo na may cellular module, nagpapadala ang app ng mga request nang direkta sa pamamagitan ng eSIM o LTE. Ang naka-cache na data ay ipinapakita kahit walang koneksyon. Kapag naibalik ang koneksyon, ina-update ang cache sa pamamagitan ng background sync.
Ang pinakasikat na kategorya: fitness tracker na may pag-sync ng ehersisyo, mga messaging app para sa pagsagot sa mga mensahe mula sa relo, mga navigator na may direksyon ng pagliko sa pulsuhan, mga music player para sa pagkontrol ng pag-playback, mga sistema ng pagbabayad, smart home para sa pagkontrol ng mga device, at mga medical monitor para sa pulse at presyon ng dugo.
Ang Apple Watch ay nagbibigay ng hanggang 18 oras ng operasyon na may aktibong companion app sa karaniwang paggamit. Wear OS — hanggang 24 na oras. Ang WatchConnectivity ay na-optimize para sa mababang paggamit ng enerhiya: ang pagpapadala ng data ay itinitigil kapag mababa ang baterya, at ang mass sync ay isinasagawa habang nagcha-charge ang relo.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din