স্ট্যান্ডঅ্যালোন ডিভাইসে নেটওয়ার্কের মাধ্যমে সরাসরি যোগাযোগ করা

Wear OS by Google-এর সাহায্যে, কোনও ঘড়ি সরাসরি নেটওয়ার্কের সাথে যোগাযোগ করতে পারে, এর জন্য Android বা iOS ফোনে অ্যাক্সেস করার প্রয়োজন হয় না। কোনও নেটওয়ার্কে Wear OS অ্যাপ কানেক্ট করার জন্য ডেটা লেয়ার API ব্যবহার করবেন না। পরিবর্তে, এই নির্দেশিকায় দেওয়া নির্দেশিকা ও ধাপ অনুসরণ করুন।

নেটওয়ার্ক অ্যাক্সেস

Wear OS অ্যাপ নেটওয়ার্ক অনুরোধ করতে পারে। কোনও ওয়াচ ফোনের সাথে ব্লুটুথ কানেকশনের মাধ্যমে কানেক্ট করা থাকলে, ওয়াচের নেটওয়ার্ক ট্রাফিক সাধারণত ফোনের মাধ্যমে প্রক্সি করা হয়।

ফোন উপলভ্য না থাকলে, ওয়াচের হার্ডওয়্যারের উপর নির্ভর করে ওয়াই-ফাই ও মোবাইল নেটওয়ার্ক ব্যবহার করা হয়। Wear OS প্ল্যাটফর্ম নেটওয়ার্কের মধ্যে ট্রানজিশন ম্যানেজ করে।

আপনি HTTP, TCP ও UDP-এর মতো প্রোটোকল ব্যবহার করতে পারবেন। তবে, CookieManager ক্লাস সহ android.webkit API উপলভ্য নেই। অনুরোধ ও উত্তরের হেডার রিড ও রাইট করার মাধ্যমে আপনি কুকি ব্যবহার করতে পারবেন।

অ্যাসিঙ্ক্রোনাস অনুরোধের জন্য WorkManager ব্যবহার করুন, যার মধ্যে নিয়মিত ইন্টারভ্যালে পোলিং অন্তর্ভুক্ত।

নির্দিষ্ট ধরনের নেটওয়ার্কে কানেক্ট করার প্রয়োজন হলে, নেটওয়ার্ক স্টেট পড়া দেখুন।

হাই-ব্যান্ডউইথ নেটওয়ার্ক অ্যাক্সেস

Wear OS প্ল্যাটফর্ম, সামগ্রিকভাবে সেরা ব্যবহারকারীর অভিজ্ঞতা প্রদান করার উদ্দেশ্যে নেটওয়ার্ক কানেক্টিভিটি ম্যানেজ করে। প্ল্যাটফর্ম ডিফল্ট অ্যাক্টিভ নেটওয়ার্ক বেছে নেয় দুটি প্রয়োজন ব্যালেন্স করে: ব্যাটারির দীর্ঘ আয়ু ও নেটওয়ার্ক ব্যান্ডউইথ।

ব্যাটারি বাঁচানোকে অগ্রাধিকার দেওয়া হলে, অ্যাক্টিভ নেটওয়ার্কে বড় ফাইল ট্রান্সফার বা মিডিয়া স্ট্রিমের মতো নেটওয়ার্ক টাস্কের জন্য পর্যাপ্ত ব্যান্ডউইথ নাও থাকতে পারে।

আপনার অ্যাপের প্রয়োজনীয় নেটওয়ার্ক ব্যান্ডউইথ আছে কিনা তা নিশ্চিত করতে সাহায্য করার জন্য এই বিভাগে ConnectivityManager ক্লাস ব্যবহার করার বিষয়ে নির্দেশিকা দেওয়া হয়েছে। নেটওয়ার্ক রিসোর্সের উপর ফাইন-গ্রেন কন্ট্রোল সম্পর্কে সাধারণ তথ্য পেতে, নেটওয়ার্ক ব্যবহার ম্যানেজ করা দেখুন।

ওয়াই-ফাই কানেক্টিভিটির অনুরোধ করা

যেসব ব্যবহারের ক্ষেত্রে হাই-ব্যান্ডউইথ নেটওয়ার্ক অ্যাক্সেস প্রয়োজন, যেমন, বড় ফাইল ট্রান্সফার করা বা মিডিয়া স্ট্রিম করা, সেগুলির জন্য হাই-ব্যান্ডউইথ ট্রান্সপোর্টের মাধ্যমে কানেক্টিভিটির অনুরোধ করুন, যেমন ওয়াই-ফাই। নিচে দেওয়া উদাহরণে এটি দেখানো হয়েছে:

val callback = object : ConnectivityManager.NetworkCallback() {
    override fun onAvailable(network: Network) {
        super.onAvailable(network)
        // The Wi-Fi network has been acquired. Bind it to use this network by default.
        connectivityManager.bindProcessToNetwork(network)
    }

    override fun onLost(network: Network) {
        super.onLost(network)
        // Called when a network disconnects or otherwise no longer satisfies this request
        // or callback.
    }
}

fun requestWifiNetwork() {
    connectivityManager.requestNetwork(
        NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build(),
        callback
    )
}

নেটওয়ার্ক পাওয়া তাৎক্ষণিক নাও হতে পারে, কারণ ব্যাটারি বাঁচানোর জন্য ওয়াচের ওয়াই-ফাই বা মোবাইল রেডিও বন্ধ থাকতে পারে। ওয়াচ কোনও নেটওয়ার্কে কানেক্ট করতে না পারলে, আপনার NetworkCallback ইনস্ট্যান্সের onAvailable() পদ্ধতি কল করা হয় না।

onAvailable() কল করা হলে, NetworkCallback রিলিজ না করা পর্যন্ত ডিভাইসটি ওয়াই-ফাই নেটওয়ার্কের সাথে কানেক্ট করে থাকার চেষ্টা করে। ব্যাটারির আয়ু সাশ্রয় করতে, নিচের উদাহরণে দেখানো পদ্ধতি অনুসরণ করে কলব্যাক রিলিজ করুন। এটি তখনই করবেন যখন আপনার ওয়াই-ফাই নেটওয়ার্কের আর প্রয়োজন নেই।

connectivityManager.bindProcessToNetwork(null)
connectivityManager.unregisterNetworkCallback(callback)

ওয়াই-ফাই সেটিংস অ্যাক্টিভিটি লঞ্চ করা

ওয়াই-ফাই নেটওয়ার্কের জন্য অনুরোধ করা হলে, সিস্টেম সেভ করা নেটওয়ার্কের সাথে কানেক্ট করার চেষ্টা করে যদি কোনও নেটওয়ার্ক কনফিগার করা থাকে এবং রেঞ্জের মধ্যে থাকে। সেভ করা কোনও ওয়াই-ফাই নেটওয়ার্ক উপলভ্য না থাকলে, আপনার NetworkCallback ইনস্ট্যান্সের onAvailable কলব্যাক পদ্ধতি কল করা হয় না।

নেটওয়ার্ক অনুরোধের টাইম-আউট হওয়ার সময় আপনি Handler ব্যবহার করলে, টাইম-আউট হওয়ার সময় ব্যবহারকারীকে ওয়াই-ফাই নেটওয়ার্ক যোগ করতে নির্দেশ দিতে পারবেন। নিম্নলিখিত ইনটেন্ট ব্যবহার করে ওয়াই-ফাই নেটওয়ার্ক যোগ করার অ্যাক্টিভিটিতে ব্যবহারকারীকে সরাসরি পাঠান:

val networkSettingsAction = "com.google.android.clockwork.settings.connectivity.wifi.ADD_NETWORK_SETTINGS"
val intent = Intent(networkSettingsAction).apply {
    addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}
context.startActivity(intent)

সেটিংস অ্যাক্টিভিটি লঞ্চ করতে, আপনার অ্যাপের CHANGE_WIFI_STATE অনুমতি থাকতে হবে।

ইউজার ইন্টারফেস সংক্রান্ত বিবেচ্য বিষয়

আপনার অ্যাপের যদি হাই-ব্যান্ডউইথ অপারেশনের জন্য নতুন ওয়াই-ফাই নেটওয়ার্কের সাথে কানেকশন প্রয়োজন হয়, তাহলে আপনাকে নির্বিঘ্নে এটি পেতে হবে এবং প্রয়োজন অনুযায়ী রিলিজ করতে হবে। কোনও ওয়াই-ফাই নেটওয়ার্ক উপলভ্য না থাকলে, ফিচারটির জন্য ওয়াই-ফাই প্রয়োজন হয় তা বুঝিয়ে বলুন এবং ওয়াই-ফাই সেটিংস অ্যাক্টিভিটি লঞ্চ করার একটি উপায় দিন। যেসব অ্যাপ ফিচারের জন্য হাই-ব্যান্ডউইথ নেটওয়ার্কের প্রয়োজন নেই, সেগুলি অ্যাক্সেস করার ক্ষেত্রে ব্যবহারকারীকে ব্লক করবেন না।

বিদ্যুৎ ও ডেটা ব্যবহার সংক্রান্ত বিবেচ্য বিষয়

ব্যাটারির আয়ু বাড়াতে ও মোবাইল ডেটার ব্যবহার কমাতে, Wear OS ডিভাইস LTE বা মেটার করা কানেকশনের পরিবর্তে ব্লুটুথ বা ওয়াই-ফাই কানেকশন আবার স্থাপন না করা পর্যন্ত, অপ্রয়োজনীয় নেটওয়ার্কিং টাস্ক, যেমন অ্যানালিটিক্স রিপোর্ট করা বা লগ সংগ্রহ করা বন্ধ রাখুন।

ক্লাউড মেসেজিং

বিজ্ঞপ্তি পাঠানোর জন্য, সরাসরি Firebase Cloud Messaging (FCM) ব্যবহার করুন।

নেটওয়ার্ক অ্যাক্সেস বা FCM-এর জন্য কোনও API Wear OS-এর জন্য নির্দিষ্ট নয়। নেটওয়ার্কে কানেক্ট করা এবং ক্লাউড মেসেজিং সম্পর্কে আগে থেকে থাকা ডকুমেন্টেশন দেখুন।

FCM Doze-এর সাথে ভালভাবে কাজ করে এবং এটি হল ওয়াচে বিজ্ঞপ্তি পাঠানোর সুপারিশ করা পদ্ধতি।

আপনার Wear OS অ্যাপ চলার সময়, কোনও ডিভাইসের জন্য রেজিস্ট্রেশন টোকেন সংগ্রহ করে FCM থেকে মেসেজ পাওয়ার সুবিধা দেয়। তারপরে, আপনার সার্ভার FCM REST এন্ডপয়েন্টে মেসেজ পাঠানোর সময়, গন্তব্যের অংশ হিসেবে টোকেনটি অন্তর্ভুক্ত করুন। FCM টোকেন দ্বারা শনাক্ত করা ডিভাইসে মেসেজ পাঠায়।

FCM মেসেজ জাভাস্ক্রিপ্ট অবজেক্ট নোটেশন (JSON) ফর্ম্যাটে থাকে এবং এতে নিচের যেকোনও একটি বা দুটি পে লোডই থাকতে পারে:

  • বিজ্ঞপ্তির পেলোড: কোনও ওয়াচ বিজ্ঞপ্তি পেলোড পেলে, ডেটা সরাসরি বিজ্ঞপ্তি স্ট্রিমে ব্যবহারকারীকে দেখানো হয়। ব্যবহারকারী বিজ্ঞপ্তিতে ট্যাপ করলে, আপনার অ্যাপ লঞ্চ হয়।
  • ডেটা পেলোড: পেলোডে কাস্টম কী বা ভ্যালু পেয়ারের সেট থাকলে। পে-লোড আপনার Wear OS অ্যাপে ডেটা হিসেবে ডেলিভার করা হয়।

পে-লোড সংক্রান্ত আরও তথ্য ও উদাহরণ পেতে, মেসেজের ধরন দেখুন।

সাধারণত, ফোন অ্যাপ থেকে ঘড়িতে বিজ্ঞপ্তি ব্রিজ করা হয়। আপনার যদি স্ট্যান্ডঅ্যালোন Wear OS অ্যাপ এবং সংশ্লিষ্ট ফোন অ্যাপ থাকে, তাহলে ডুপ্লিকেট বিজ্ঞপ্তি আসতে পারে। যেমন, FCM থেকে পাওয়া একটি বিজ্ঞপ্তি, যা ফোন ও ওয়াচ, দুটি ডিভাইসেই এসেছে, তা দুটি ডিভাইসেই আলাদা আলাদা করে দেখানো যেতে পারে। আপনি ব্রিজিং API ব্যবহার করে এটি প্রতিরোধ করতে পারেন।

ব্যাকগ্রাউন্ড পরিষেবা ব্যবহার করা

ব্যাকগ্রাউন্ড টাস্ক সঠিকভাবে এক্সিকিউট করা হচ্ছে কিনা তা নিশ্চিত করতে, সেগুলিকে ডোজ ও অ্যাপ স্ট্যান্ডবাইয়ের জন্য অ্যাকাউন্ট করতে হবে।

স্ক্রিন বন্ধ হয়ে গেলে বা যথেষ্ট দীর্ঘ সময় ধরে অ্যাম্বিয়েন্ট মোডে থাকলে, Doze-এর একটি সাবসেট হতে পারে এবং ব্যাকগ্রাউন্ড টাস্ক নির্দিষ্ট সময়ের জন্য পিছিয়ে দেওয়া হতে পারে। পরে, ডিভাইসটি দীর্ঘক্ষণ স্থির অবস্থায় থাকলে, নিয়মিত Doze হয়। WorkManager API-এর মাধ্যমে অনুরোধ শিডিউল করুন, যা আপনার অ্যাপকে ডোজ-সেফ কোড এক্সিকিউশনের জন্য রেজিস্টার করতে দেয়।

বাধ্যবাধকতা সহ শিডিউল করা

ব্যাটারি লাইফ বাঁচানোর জন্য আপনি কনস্ট্রেন্ট ব্যবহার করে অনুরোধ কনফিগার করতে পারেন। আপনার অনুরোধে যোগ করার জন্য নিম্নলিখিত সীমাবদ্ধতার মধ্যে একটি বা একাধিক বেছে নিন:

  • নেটওয়ার্কিং প্রয়োজন এমন অনুরোধ শিডিউল করুন।

    NetworkType CONNECTED নাকি UNMETERED তা উল্লেখ করুন। UNMETERED হল বড় ডেটা ট্রান্সফারের জন্য, আর CONNECTED হল ছোট ট্রান্সফারের জন্য।

  • চার্জ করার সময় অনুরোধ শিডিউল করুন।

  • ডিভাইসটি অলস অবস্থায় থাকাকালীন কোনও অনুরোধ শিডিউল করুন। কম অগ্রাধিকারের ব্যাকগ্রাউন্ড কাজ বা সিঙ্ক্রোনাইজেশনের জন্য এটি উপযোগী, বিশেষ করে যখন ডিভাইস চার্জ হচ্ছে।

আরও তথ্যের জন্য, WorkManager-এর পিরিয়ডিক কাজের উপর বাধার প্রভাব নির্দেশিকা পর্যালোচনা করুন।