Companion App — Apple Watch ve Wear OS giyilebilir cihazları için, akıllı telefondaki ana uygulamayla birlikte çalışan bir uygulama arkadaşıdır. Companion App, WatchConnectivity (iOS) veya Wearable Data Layer (Android) aracılığıyla verileri senkronize eder, saatte bildirimleri görüntüler ve bağımsız olarak işlev görebilir. Geliştirme, watchOS için Swift ve Wear OS için Kotlin ile yapılır. Daha fazla bilgi için WatchConnectivity Docs sayfasını ziyaret edin.
Önemli Noktalar
Companion App — Apple Watch veya Wear OS giyilebilir cihazları için, ana iOS veya Android uygulamasıyla birlikte gelen bir uygulamadır. Ana amaç, işlevselliği bileğe genişletmektir: hızlı bilgi görüntüleme, mesajlara yanıt verme, müzik kontrolü, egzersiz takibi. Geliştirici bunu derlemeye dahil ettiyse, telefona ana uygulama yüklendiğinde Companion App otomatik olarak saate yüklenir.
Mimari bir companion uygulaması iki bileşenden oluşur: iOS/Android uygulaması (ana) ve watchOS/Wear OS uygulaması (arkadaş). Aralarındaki iletişim sistem API'leri aracılığıyla gerçekleşir: Apple için WatchConnectivity ve Google için Wearable Data Layer. Veriler Bluetooth veya Wi-Fi üzerinden arka planda aktarılır — kullanıcı senkronizasyon sürecini görmez. Saatteki uygulamanın, mobil olandan farklı, küçük ekrana uyarlanmış kendi kullanıcı arayüzü olabilir.
Companion uygulama türleri telefona bağımlılık derecesine göre farklılık gösterir. Ayna uygulamalar telefon verilerinin bir kopyasını görüntüler ve bağlantı olmadan çalışmaz. Ayrıştırılmış uygulamalar kendi mantığına sahiptir, verileri önbelleğe alır ve telefondan bağlantı kesildiğinde işlevselliğin bir kısmını korur. Bağımsız uygulamalar (watchOS 6+ ve Wear OS 3+) telefon olmadan kurulabilir ve kendi ağ erişimiyle tamamen bağımsız olarak çalışır.
WatchConnectivity — iPhone ve Apple Watch arasında çift yönlü iletişim için Apple'ın framework'ü. Dört veri aktarım mekanizması sağlar: Application Context (bilinen son durum), File Transfer (herhangi bir boyuttaki dosyalar), User Info (garantili teslimatlı sözlükler) ve Interactive Messaging (gerçek zamanlı çift yönlü iletişim). Sistem, mesafe ve sinyal kalitesine göre otomatik olarak Bluetooth veya Wi-Fi seçer.
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 — garantili gerçek zamanlı teslimata sahip tek WatchConnectivity mekanizması. Bağlantı aktif olduğunda bir mesaj gönderilir ve 200–500 ms içinde yanıt alır. Acil yanıt gerektiren eylemler için kullanılır: egzersiz başlatma, ödeme onaylama, akıllı ev kapısı açma. Oturum her iki cihazda da aktif olmalıdır — saat kilitliyse veya uygulama arka plandaysa teslimat garanti edilmez.
File Transfer API büyük miktardaki veriler için tasarlanmıştır — görüntüler, ses dosyaları, dışa aktarılan egzersizler. Uygulama kapalı olsa bile dosyalar arka planda aktarılır. Sınır, kuyrukta en fazla 10 eşzamanlı aktarımdır. Application Context en ekonomik mekanizmadır: yalnızca son durumu iletir, önceki gönderilmemiş bağlamları iptal eder. Ayarları ve mevcut durumu senkronize etmek için idealdir.
Wearable Data Layer — bir Android cihazı ile Wear OS saatleri arasında veri senkronizasyonu için Google Play Services'den bir API. Üç protokol sağlar: DataItem (anahtar-değer çifti senkronizasyonu), MessageClient (tek yönlü mesajlar) ve ChannelClient (akış verisi). DataItem'lar Google Cloud üzerinden otomatik olarak senkronize edilir — telefon kullanılamıyorsa, bağlantı yeniden kurulduğunda veri teslim edilir.
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 // /workout/heartrate
val data = DataMapItem
.fromDataItem(event.dataItem)
.dataMap
val bpm = data.getInt("bpm")
updateUI(bpm)
}
}
}
}
}
MessageClient — bir yol ve bayt dizisi ile tek yönlü mesajlar gönderir. "Egzersizi başlat" veya "Müziği duraklat" gibi komutlar için kullanılır. Cihaz bağlıysa mesaj güvenilir bir şekilde teslim edilir. Wear OS'de mesaj almak için WearableListenerService uygulayın ve manifest dosyasına kaydedin. MessageClient otomatik önbellekleme desteklemez — saat bağlantısı kesilirse mesaj kaybolur.
ChannelClient — akış verileri için bir protokol: ses, video, sürekli sensör akışları. Bayt dizilerinin iletildiği çift yönlü bir kanal açar. Yalnızca Wear OS 2.0+'da desteklenir. ChannelClient, Bluetooth üzerinden aramalar için telefondan saate ses aktarmak ve harici Bluetooth sensörlerinden (kalp atış hızı monitörü, bisiklet bilgisayarı) gelen verileri telefon aracılığıyla saate iletmek için kullanışlıdır.
Bağımsız çalışma — bir companion uygulamasının telefon bağlantısı olmadan işlev görme yeteneği. Cellular modülü olan watchOS'ta uygulama, ağ isteklerini doğrudan eSIM üzerinden gönderir. LTE'li Wear OS'ta benzer işlevsellik mevcuttur. Hücresel modül olmasa bile saat, telefondaki en son verileri önbelleğe alır ve bağlantı kesildiğinde görüntüler — kullanıcı son senkronizasyon anındaki bilgileri görür.
| Mod | Veri | Kullanılabilirlik | Örnek |
|---|---|---|---|
| Çevrimiçi | Sunucudan/telefondan canlı | Tam | Navigasyon rotası |
| Önbellekte | Telefondan en son | Sınırlı | Kişi listesi |
| Çevrimdışı | Saatte yerel | Minimum | Zamanlayıcı, kronometre |
Veri önbelleğe alma — bağımsız çalışmanın önemli bir unsurudur. Uygulama, alınan son durumu saatin yerel deposuna kaydetmelidir. watchOS'ta UserDefaults veya CoreData kullanılır, Wear OS'ta — Room Database veya DataStore. Bağlantı yeniden kurulduğunda, önbellek arka plan senkronizasyonu ile güncellenir. Veriler 24 saatten daha eskiyse, uygulama "Telefon bağlantısını güncelleyin" mesajını gösterir.
Sınırlı ekran için giyilebilir arayüz — saatin ekranı 1.5–2 inçtir — companion uygulama arayüzü mümkün olduğunca öz olmalıdır. Apple, watchOS'ta tek sütunlu NavigationView önerir, Google, Wear OS'ta gezinme için kaydırmalı kart listesi önerir. Düğmeler rahat dokunma için en az 44pt boyutunda olmalıdır. Metin giriş alanlarından kaçının — önceden tanımlanmış yanıtlar, dikte veya Digital Crown kaydırma tekerleği kullanın.
Enerji verimli tasarım — companion uygulaması saatin pilini birkaç saat içinde bitirmemelidir. Minimum aralıkla arka plan güncellemeleri kullanın. watchOS'ta WatchConnectivity, pil zayıf olduğunda aktarımları duraklatır ve şarjdan sonra devam ettirir. Wear OS'ta Wearable Data Layer, enerji tasarrufu için küçük aktarımları otomatik olarak tek bir aktarımda gruplar. Bilek kaldırma — kullanıcı bileğini kaldırdığında arayüzü güncelleyin.
Companion uygulama mimarisi olası bağlantı kaybı düşünülerek tasarlanmalıdır. Repository desenini kullanın: telefonda tek bir veri kaynağı, saatteki yerel depo ile senkronize olur. Saatteki ViewModel, yerel depoya abone olur ve bağlantı durumundan bağımsız olarak verileri görüntüler. Bağlantı yeniden kurulduğunda, saatteki Repository, WatchConnectivity veya Wearable Data Layer aracılığıyla veri ister ve yerel depoyu günceller.
class WorkoutRepository constructor(
private val localStorage: WorkoutDao,
private val wearableClient: WearableClient
) {
val workoutFlow: Flow<Workout?> = merge(
localStorage.observeWorkout(),
wearableClient.observeWorkout()
.onEach { localStorage.save(it) }
)
}
Test bir companion uygulamasının test edilmesi, gerçek saatlerde veya bir emülatörde doğrulama gerektirir. Xcode, iPhone simülatörüyle eşleştirilmiş Apple Watch simülatörünü destekler — fiziksel cihazlar olmadan WatchConnectivity'i test edebilirsiniz. Android Studio, Wearable Data Layer desteğiyle bir Wear OS emülatörü içerir. Kritik test senaryoları: aktarım sırasında bağlantı kaybı, düşük pil, iki companion uygulamasının eşzamanlı çalışması ve bağımsız saatlerde telefonsuz kurulum.
Companion uygulama yayınlama watchOS'ta App Store'a ayrı bir yükleme gerektirmez — uygulama, iOS uygulama ikili dosyasına dahil edilir ve otomatik olarak saate kurulması önerilir. Wear OS'ta companion uygulaması Google Play'de ayrı olarak yayınlanır ancak aynı paket aracılığıyla ana uygulamaya bağlanır. iOS'ta App Group ve Android'de sharedUserId, ana ve companion uygulamalarının paylaşılan veri depolama alanını kullanmasına izin verir.
Sıkça Sorulan Sorular
Companion App, tam işlevsellik için iPhone veya Android'de ana uygulamanın yüklü olmasını gerektirir. Saatteki normal bağımsız uygulama (örneğin, pusula veya kronometre) telefon olmadan bağımsız olarak çalışır. Companion App, telefonla veri senkronize eder, bildirimleri görüntüler ve hızlı işlemlere izin verir, ancak telefon olmadan bazı işlevleri kaybeder.
WatchConnectivity dört modu destekler: öncekini iptal ederek mevcut durumu iletmek için Application Context, herhangi bir boyuttaki dosyalar için File Transfer, garantili teslimatlı veri sözlükleri için User Info ve gerçek zamanlı çift yönlü iletişim için Interactive Messaging. Veriler Bluetooth veya Wi-Fi üzerinden iletilir — sistem otomatik olarak en uygun kanalı seçer.
Evet, bir companion uygulaması bağımsız olarak çalışır — watchOS ve Wear OS, telefondan alınan verileri önbelleğe alır. Hücresel modüllü saatlerde uygulama, istekleri doğrudan eSIM veya LTE üzerinden gönderir. Önbelleğe alınmış veriler bağlantı olmadan bile görüntülenir. Bağlantı yeniden kurulduğunda, önbellek arka plan senkronizasyonu ile güncellenir.
En popüler kategoriler: egzersiz senkronizasyonlu fitness takipçileri, saatten mesajlara yanıt vermek için mesajlaşma uygulamaları, bilekte dönüş talimatları olan navigasyon uygulamaları, oynatma kontrolü için müzik çalarlar, ödeme sistemleri, cihaz kontrolü için akıllı ev ve nabız ile tansiyon için tıbbi monitörler.
Apple Watch, standart kullanımda aktif bir companion uygulamasıyla 18 saate kadar çalışma sağlar. Wear OS — 24 saate kadar. WatchConnectivity düşük enerji tüketimi için optimize edilmiştir: pil zayıf olduğunda veri aktarımı duraklatılır ve toplu senkronizasyon saat şarj olurken gerçekleştirilir.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun