التطبيق المرافق — تطبيق مصاحب للأجهزة القابلة للارتداء Apple Watch و Wear OS، يعمل جنبًا إلى جنب مع التطبيق الرئيسي على الهاتف الذكي. يقوم التطبيق المرافق بمزامنة البيانات عبر WatchConnectivity (iOS) أو Wearable Data Layer (Android)، ويعرض الإشعارات على الساعة ويمكنه العمل بشكل مستقل. يتم التطوير بلغة Swift لـ watchOS و Kotlin لـ Wear OS. لمزيد من المعلومات — على وثائق WatchConnectivity.
أهم النقاط
التطبيق المرافق — تطبيق للأجهزة القابلة للارتداء Apple Watch أو Wear OS يأتي مقترنًا مع التطبيق الرئيسي لنظام iOS أو Android. الهدف الرئيسي هو توسيع الوظائف إلى المعصم: عرض سريع للمعلومات، الرد على الرسائل، التحكم في الموسيقى، تتبع التمارين. يتم تثبيت التطبيق المرافق تلقائيًا على الساعة عند تثبيت التطبيق الرئيسي على الهاتف، إذا قام المطور بتضمينه في البنية.
الهندسة المعمارية للتطبيق المرافق تتضمن مكونين: تطبيق iOS/Android (الرئيسي) وتطبيق watchOS/Wear OS (المرافق). يتم الاتصال بينهما من خلال واجهات برمجة تطبيقات النظام: WatchConnectivity لـ Apple و Wearable Data Layer لـ Google. يتم نقل البيانات في الخلفية عبر Bluetooth أو Wi-Fi — لا يرى المستخدم عملية المزامنة. يمكن أن يكون للتطبيق على الساعة واجهة مستخدم خاصة به، مختلفة عن الجوال، مكيفة مع الشاشة الصغيرة.
أنواع التطبيقات المرافقة تختلف في درجة اعتمادها على الهاتف. تطبيقات المرآة تعرض نسخة من بيانات الهاتف ولا تعمل دون اتصال. التطبيقات المنفصلة لها منطقها الخاص، تخزن البيانات مؤقتًا وتحتفظ بجزء من الوظائف عند فصلها عن الهاتف. التطبيقات المستقلة (watchOS 6+ و Wear OS 3+) يمكن تثبيتها بدون هاتف وتعمل بشكل مستقل تمامًا مع وصول خاص بها إلى الشبكة.
WatchConnectivity — إطار عمل Apple للاتصال ثنائي الاتجاه بين iPhone و Apple Watch. يوفر أربع آليات لنقل البيانات: Application Context (آخر حالة معروفة)، File Transfer (ملفات من أي حجم)، User Info (قواميس مع تسليم مضمون) و Interactive Messaging (اتصال ثنائي الاتجاه في الوقت الفعلي). يختار النظام تلقائيًا Bluetooth أو Wi-Fi بناءً على المسافة وجودة الإشارة.
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 — واجهة برمجة تطبيقات من Google Play Services لمزامنة البيانات بين جهاز Android وساعات Wear OS. يوفر ثلاثة بروتوكولات: DataItem (مزامنة أزواج المفتاح-القيمة)، MessageClient (رسائل أحادية الاتجاه) و ChannelClient (نقل البيانات المتدفقة). تتم مزامنة DataItems تلقائيًا عبر Google Cloud — إذا كان الهاتف غير متاح، يتم تسليم البيانات عند استعادة الاتصال.
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 — يرسل رسائل أحادية الاتجاه بمسار ومصفوفة بايت. يُستخدم للأوامر مثل "بدء التمرين" أو "إيقاف الموسيقى مؤقتًا". يتم تسليم الرسالة بشكل موثوق إذا كان الجهاز متصلاً. لاستقبال الرسائل على Wear OS، قم بتنفيذ WearableListenerService وتسجيله في البيان. لا يدعم MessageClient التخزين المؤقت التلقائي — إذا كانت الساعة غير متصلة، تُفقد الرسالة.
ChannelClient — بروتوكول للبيانات المتدفقة: الصوت، الفيديو، تدفقات المستشعرات المستمرة. يفتح قناة ثنائية الاتجاه يتم من خلالها نقل مصفوفات البايت. مدعوم فقط على Wear OS 2.0+. ChannelClient مفيد لنقل الصوت من الهاتف إلى الساعة للمكالمات عبر Bluetooth ولإعادة نقل البيانات من مستشعرات Bluetooth الخارجية (مراقب معدل ضربات القلب، كمبيوتر الدراجة) عبر الهاتف إلى الساعة.
التشغيل المستقل — قدرة التطبيق المرافق على العمل دون اتصال بالهاتف. على watchOS مع وحدة خلوية، يرسل التطبيق طلبات الشبكة مباشرة عبر eSIM. على Wear OS مع LTE، تتوفر وظائف مماثلة. حتى بدون وحدة خلوية، تقوم الساعة بتخزين أحدث البيانات من الهاتف مؤقتًا وتعرضها عند فصل الاتصال — يرى المستخدم المعلومات التي كانت محدثة في وقت آخر مزامنة.
| الوضع | البيانات | التوفر | مثال |
|---|---|---|---|
| متصل | مباشرة من الخادم/الهاتف | كامل | طريق الملاحة |
| مخبأ | آخرها من الهاتف | محدود | قائمة جهات الاتصال |
| غير متصل | محلي على الساعة | أدنى | مؤقت، ساعة إيقاف |
التخزين المؤقت للبيانات — عنصر أساسي في التشغيل المستقل. يجب أن يحفظ التطبيق آخر حالة مستلمة في التخزين المحلي للساعة. على watchOS يُستخدم UserDefaults أو CoreData، على Wear OS — Room Database أو DataStore. عند استعادة الاتصال، يتم تحديث التخزين المؤقت من خلال المزامنة في الخلفية. إذا كانت البيانات أقدم من 24 ساعة، يعرض التطبيق رسالة "قم بتحديث اتصال الهاتف".
واجهة مستخدم للساعة لشاشة محدودة — شاشة الساعة بحجم 1.5–2 بوصة — يجب أن تكون واجهة التطبيق المرافق موجزة قدر الإمكان. توصي Apple باستخدام NavigationView بعمود واحد على watchOS، Google توصي بقائمة بطاقات على Wear OS مع تمرير للتنقل. يجب أن تكون الأزرار بحجم 44pt على الأقل للمس المريح. تجنب حقول إدخال النص — استخدم الردود المعدة مسبقًا، الإملاء، أو عجلة التمرير Digital Crown.
تصميم موفر للطاقة — يجب ألا يستنزف التطبيق المرافق بطارية الساعة في غضون ساعات قليلة. استخدم التحديثات في الخلفية بفاصل زمني أدنى. على watchOS، يوقف WatchConnectivity النقل عندما تكون البطارية منخفضة ويستأنفه بعد الشحن. على Wear OS، يقوم Wearable Data Layer بتجميع عمليات النقل الصغيرة تلقائيًا في واحدة لتوفير الطاقة. رفع المعصم — قم بتحديث واجهة المستخدم فقط عندما يرفع المستخدم معصمه.
هندسة التطبيق المرافق يجب تصميمها مع مراعاة فقدان الاتصال المحتمل. استخدم نمط Repository: مصدر بيانات واحد على الهاتف يتزامن مع المستودع المحلي على الساعة. ViewModel على الساعة يشترك في المستودع المحلي ويعرض البيانات بغض النظر عن حالة الاتصال. عند استعادة الاتصال، يطلب Repository على الساعة البيانات عبر WatchConnectivity أو Wearable Data Layer ويحدث التخزين المحلي.
class WorkoutRepository constructor(
private val localStorage: WorkoutDao,
private val wearableClient: WearableClient
) {
val workoutFlow: Flow<Workout?> = merge(
localStorage.observeWorkout(),
wearableClient.observeWorkout()
.onEach { localStorage.save(it) }
)
}
الاختبار للتطبيق المرافق يتطلب التحقق على ساعات حقيقية أو محاكي. يدعم Xcode محاكي Apple Watch مقترنًا بمحاكي iPhone — يمكنك اختبار WatchConnectivity بدون أجهزة فعلية. يتضمن Android Studio محاكي Wear OS مع دعم Wearable Data Layer. حالات الاختبار الحرجة: فقدان الاتصال أثناء النقل، انخفاض البطارية، التشغيل المتزامن لتطبيقين مرافقين، والتثبيت بدون هاتف على ساعات مستقلة.
نشر التطبيق المرافق على watchOS لا يتطلب تحميلًا منفصلاً في App Store — يتم تضمين التطبيق في ثنائي تطبيق iOS ويُعرض تلقائيًا للتثبيت على الساعة. على Wear OS، يتم نشر التطبيق المرافق بشكل منفصل على Google Play ولكنه مرتبط بالتطبيق الرئيسي من خلال نفس الحزمة. App Group على iOS و sharedUserId على Android يسمحان للتطبيق الرئيسي والمرافق باستخدام مساحة تخزين بيانات مشتركة.
الأسئلة الشائعة
يتطلب التطبيق المرافق تثبيت التطبيق الرئيسي على iPhone أو Android للوظائف الكاملة. التطبيق المستقل العادي على الساعة (مثل البوصلة أو ساعة الإيقاف) يعمل بشكل مستقل بدون هاتف. يقوم التطبيق المرافق بمزامنة البيانات مع الهاتف، ويعرض الإشعارات ويسمح بتنفيذ إجراءات سريعة، لكن بدون الهاتف يفقد بعض الوظائف.
يدعم WatchConnectivity أربعة أوضاع: Application Context لنقل الحالة الحالية مع إلغاء الحالة السابقة، File Transfer للملفات من أي حجم، User Info لقواميس البيانات مع التسليم المضمون و Interactive Messaging للاتصال ثنائي الاتجاه في الوقت الفعلي. يتم نقل البيانات عبر Bluetooth أو Wi-Fi — يختار النظام القناة المثلى تلقائيًا.
نعم، يعمل التطبيق المرافق بشكل مستقل — watchOS و Wear OS يخزنان البيانات المستلمة من الهاتف مؤقتًا. على الساعات ذات الوحدة الخلوية، يرسل التطبيق الطلبات مباشرة عبر eSIM أو LTE. يتم عرض البيانات المخبأة حتى بدون اتصال. عند استعادة الاتصال، يتم تحديث التخزين المؤقت من خلال المزامنة في الخلفية.
الفئات الأكثر شيوعًا: متتبعات اللياقة البدنية مع مزامنة التمارين، تطبيقات المراسلة للرد على الرسائل من الساعة، تطبيقات الملاحة مع توجيهات الانعطاف على المعصم، مشغلات الموسيقى للتحكم في التشغيل، أنظمة الدفع، المنزل الذكي للتحكم في الأجهزة، وأجهزة المراقبة الطبية للنبض وضغط الدم.
توفر Apple Watch ما يصل إلى 18 ساعة من العمل مع التطبيق المرافق النشط في الاستخدام العادي. Wear OS — ما يصل إلى 24 ساعة. WatchConnectivity محسن لاستهلاك الطاقة المنخفض: يتوقف نقل البيانات عند انخفاض البطارية، ويتم تنفيذ المزامنة الجماعية أثناء شحن الساعة.
الخلاصة
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.