কম্প্যানিয়ন অ্যাপ — Apple Watch এবং Wear OS-এর মতো পরিধেয় ডিভাইসের জন্য একটি সঙ্গী অ্যাপ্লিকেশন, যা স্মার্টফোনের মূল অ্যাপ্লিকেশনের সাথে যুক্ত হয়ে কাজ করে। কম্প্যানিয়ন অ্যাপ WatchConnectivity (iOS) বা Wearable Data Layer (Android) এর মাধ্যমে ডেটা সিঙ্ক্রোনাইজ করে, ঘড়িতে বিজ্ঞপ্তি প্রদর্শন করে এবং স্বায়ত্তশাসিতভাবে কাজ করতে পারে। উন্নয়ন watchOS-এর জন্য Swift এবং Wear OS-এর জন্য Kotlin-এ করা হয়। আরও জানতে — WatchConnectivity Docs।
মূল বিষয়
কম্প্যানিয়ন অ্যাপ — Apple Watch বা Wear OS পরিধেয় ডিভাইসের জন্য একটি অ্যাপ্লিকেশন যা মূল iOS বা Android অ্যাপের সাথে আসে। মূল উদ্দেশ্য হল কব্জিতে কার্যকারিতা প্রসারিত করা: দ্রুত তথ্য দেখা, বার্তার উত্তর দেওয়া, সঙ্গীত নিয়ন্ত্রণ করা, ওয়ার্কআউট ট্র্যাক করা। ডেভেলপার বিল্ডে এটি অন্তর্ভুক্ত করলে ফোনে মূল অ্যাপ ইনস্টল করার সময় কম্প্যানিয়ন অ্যাপ স্বয়ংক্রিয়ভাবে ঘড়িতে ইনস্টল হয়।
আর্কিটেকচার কম্প্যানিয়ন অ্যাপে দুটি উপাদান অন্তর্ভুক্ত: iOS/Android অ্যাপ (মূল) এবং watchOS/Wear OS অ্যাপ (সঙ্গী)। তাদের মধ্যে যোগাযোগ সিস্টেম API-র মাধ্যমে পরিচালিত হয়: Apple-এর জন্য WatchConnectivity এবং Google-এর জন্য Wearable Data Layer। ডেটা ব্যাকগ্রাউন্ডে Bluetooth বা Wi-Fi-এর মাধ্যমে স্থানান্তরিত হয় — ব্যবহারকারী সিঙ্ক্রোনাইজেশন প্রক্রিয়া দেখেন না। ঘড়ির অ্যাপের নিজস্ব UI থাকতে পারে, যা মোবাইল থেকে ভিন্ন, ছোট পর্দার সাথে অভিযোজিত।
কম্প্যানিয়ন অ্যাপের প্রকারভেদ ফোনের উপর নির্ভরতার মাত্রায় ভিন্ন হয়। মিররিং অ্যাপ ফোনের ডেটার একটি কপি প্রদর্শন করে এবং সংযোগ ছাড়া কাজ করে না। ডিকাপল্ড অ্যাপ এর নিজস্ব লজিক থাকে, ডেটা ক্যাশে করে এবং ফোন থেকে সংযোগ বিচ্ছিন্ন হলে কিছু কার্যকারিতা ধরে রাখে। ইন্ডিপেন্ডেন্ট অ্যাপ (watchOS 6+ এবং Wear OS 3+) ফোন ছাড়াই ইনস্টল করা যায় এবং নিজস্ব নেটওয়ার্ক অ্যাক্সেস সহ সম্পূর্ণ স্বায়ত্তশাসিতভাবে কাজ করে।
WatchConnectivity — iPhone এবং Apple Watch-এর মধ্যে দ্বিমুখী যোগাযোগের জন্য Apple-এর ফ্রেমওয়ার্ক। এটি চারটি ডেটা স্থানান্তর প্রক্রিয়া প্রদান করে: 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 — Android ডিভাইস এবং Wear OS ঘড়ির মধ্যে ডেটা সিঙ্ক করার জন্য Google Play Services-এর একটি API। এটি তিনটি প্রোটোকল প্রদান করে: 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-এর মাধ্যমে নেটওয়ার্ক অনুরোধ পাঠায়। LTE সহ Wear OS-এ, অনুরূপ কার্যকারিতা উপলব্ধ। সেলুলার মডিউল ছাড়াও, ঘড়ি ফোন থেকে সর্বশেষ ডেটা ক্যাশে করে এবং সংযোগ বিচ্ছিন্ন হলে তা প্রদর্শন করে — ব্যবহারকারী শেষ সিঙ্কের সময় তথ্য দেখেন।
| মোড | ডেটা | উপলব্ধতা | উদাহরণ |
|---|---|---|---|
| অনলাইন | সার্ভার/ফোন থেকে লাইভ | সম্পূর্ণ | ন্যাভিগেশন রুট |
| ক্যাশেড | ফোন থেকে সর্বশেষ | সীমিত | যোগাযোগ তালিকা |
| অফলাইন | ঘড়িতে স্থানীয় | সর্বনিম্ন | টাইমার, স্টপওয়াচ |
ডেটা ক্যাশিং — স্বায়ত্তশাসিত কাজের একটি মূল উপাদান। অ্যাপকে সর্বশেষ প্রাপ্ত অবস্থা ঘড়ির স্থানীয় স্টোরেজে সংরক্ষণ করতে হবে। watchOS-এ UserDefaults বা CoreData ব্যবহৃত হয়, Wear OS-এ — Room Database বা DataStore। সংযোগ পুনরুদ্ধার হলে, ব্যাকগ্রাউন্ড সিঙ্ক্রোনাইজেশনের মাধ্যমে ক্যাশ আপডেট হয়। যদি ডেটা 24 ঘন্টার বেশি পুরানো হয়, অ্যাপ "ফোন সংযোগ আপডেট করুন" বার্তা দেখায়।
সীমিত পর্দার জন্য Wearable UI — ঘড়ির পর্দা 1.5–2 ইঞ্চি — কম্প্যানিয়ন অ্যাপ ইন্টারফেস যতটা সম্ভব সংক্ষিপ্ত হওয়া উচিত। Apple watchOS-এ এক কলাম বিশিষ্ট NavigationView সুপারিশ করে, Google Wear OS-এ নেভিগেশনের জন্য সোয়াইপ সহ কার্ড তালিকা সুপারিশ করে। আরামদায়ক স্পর্শের জন্য বাটন কমপক্ষে 44pt হতে হবে। টেক্সট ইনপুট ফিল্ড এড়িয়ে চলুন — পূর্বনির্ধারিত উত্তর, ডিক্টেশন বা Digital Crown স্ক্রোলিং হুইল ব্যবহার করুন।
শক্তি-সাশ্রয়ী ডিজাইন — কম্প্যানিয়ন অ্যাপ কয়েক ঘন্টার মধ্যে ঘড়ির ব্যাটারি শেষ করবে না। ন্যূনতম ব্যবধানে ব্যাকগ্রাউন্ড আপডেট ব্যবহার করুন। watchOS-এ, WatchConnectivity ব্যাটারি কম হলে স্থানান্তর বিরতি দেয় এবং চার্জ করার পরে পুনরায় শুরু করে। Wear OS-এ, Wearable Data Layer শক্তি বাঁচাতে স্বয়ংক্রিয়ভাবে ছোট স্থানান্তরগুলিকে একটিতে গ্রুপ করে। কব্জি তোলা — ব্যবহারকারী যখন কব্জি তোলেন তখনই UI আপডেট করুন।
কম্প্যানিয়ন অ্যাপ আর্কিটেকচার সম্ভাব্য সংযোগ বিচ্ছিন্নতা বিবেচনায় নিয়ে ডিজাইন করা উচিত। 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 iPhone সিমুলেটরের সাথে যুক্ত Apple Watch সিমুলেটর সমর্থন করে — আপনি শারীরিক ডিভাইস ছাড়াই WatchConnectivity পরীক্ষা করতে পারেন। Android Studio-তে Wearable Data Layer সমর্থন সহ Wear OS এমুলেটর অন্তর্ভুক্ত। গুরুত্বপূর্ণ পরীক্ষার ক্ষেত্র: স্থানান্তরের সময় সংযোগ হারানো, কম ব্যাটারি, দুটি কম্প্যানিয়ন অ্যাপের একসাথে কাজ এবং স্ট্যান্ডঅ্যালোন ঘড়িতে ফোন ছাড়া ইনস্টলেশন।
কম্প্যানিয়ন অ্যাপ প্রকাশনা watchOS-এ App Store-এ আলাদা আপলোডের প্রয়োজন নেই — অ্যাপটি iOS অ্যাপ বাইনারিতে অন্তর্ভুক্ত এবং স্বয়ংক্রিয়ভাবে ঘড়িতে ইনস্টলের জন্য প্রস্তাবিত হয়। Wear OS-এ, কম্প্যানিয়ন অ্যাপ Google Play-এ আলাদাভাবে প্রকাশিত হয় কিন্তু একই প্যাকেজের মাধ্যমে মূল অ্যাপের সাথে যুক্ত। iOS-এ App Group এবং Android-এ sharedUserId মূল এবং কম্প্যানিয়ন অ্যাপকে শেয়ার্ড ডেটা স্টোরেজ ব্যবহার করতে দেয়।
সচরাচর জিজ্ঞাসিত প্রশ্ন
কম্প্যানিয়ন অ্যাপের সম্পূর্ণ কার্যকারিতার জন্য 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 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন