স্যাটেলাইট নেটওয়ার্ক একদিন সাধারণ নেটওয়ার্কের মতোই শক্তিশালী হয়ে উঠবে এবং সব অ্যাপের ক্ষেত্রে নির্বিঘ্নে কাজ করবে; তবে বর্তমানে এই নেটওয়ার্কে ডেটা খুবই সীমিত। ডেটা ব্যবহারের ক্ষেত্রে সীমাবদ্ধতা সহ স্যাটেলাইট-ভিত্তিক নেটওয়ার্ককে সীমাবদ্ধ স্যাটেলাইট নেটওয়ার্ক বলা হয়।
এইসব সীমাবদ্ধতার কারণে, Android অ্যাপ ডিফল্ট হিসেবে এইসব নেটওয়ার্ক ব্যবহার করে না। আপনি যদি চান যে আপনার অ্যাপ সীমাবদ্ধ স্যাটেলাইট নেটওয়ার্কে কাজ করুক, তাহলে আপনাকে আপনার অ্যাপকে স্যাটেলাইট ডেটা ব্যবহারের জন্য অপ্টিমাইজ করা হিসেবে শনাক্ত করতে হবে এবং সীমাবদ্ধ স্যাটেলাইট নেটওয়ার্কে কানেক্ট করার সময় রিসোর্স সংরক্ষণ করার জন্য আপনার অ্যাপের ব্যবহারের ক্ষেত্রে মানিয়ে নিতে হবে।
আপনার অ্যাপের ব্যবহারের ক্ষেত্রে মানিয়ে নিন
আপনার অ্যাপকে সীমাবদ্ধ স্যাটেলাইট নেটওয়ার্ক অ্যাক্সেস করার অনুমতি দিতে আপনাকে শুধু অপ্ট-ইন করতে হবে, তবে নেটওয়ার্ক রিসোর্স দায়িত্ব সহকারে ব্যবহার করার জন্য আপনার অ্যাপের আচরণ অপ্টিমাইজ করতে আপনাকে আরও পরিবর্তন করতে হতে পারে। সীমিত ডেটা ব্যবহারের জন্য অপ্টিমাইজ করার সময় কিছু বিষয় বিবেচনা করতে হবে:
- স্যাটেলাইট নেটওয়ার্ক, টেরিস্ট্রিয়াল LTE/5G নেটওয়ার্কের তুলনায় অনেক বেশি সীমাবদ্ধতার মধ্যে কাজ করে, যার বৈশিষ্ট্য হল কম থ্রুপুট ও বেশি লেটেন্সি। সাধারণত আমরা নির্ভরযোগ্যতার কারণে ডেটা ব্যবহার কম করার জন্য সাজেস্ট করি, প্রতিটি অ্যাপ অনন্য। আপনার বর্তমান ডেটা অপ্টিমাইজেশন স্ট্র্যাটেজি এই সীমাবদ্ধ পরিবেশে গ্রহণযোগ্য ব্যবহারকারীর অভিজ্ঞতা প্রদান করে কিনা তা নির্ধারণ করতে আপনার নির্দিষ্ট ব্যবহারের ক্ষেত্রে মূল্যায়ন করা উচিত।
- আপনার অ্যাপ সীমাবদ্ধ নেটওয়ার্কে ব্যবহারের জন্য উপযুক্ত কিনা তা স্থির করুন। কিছু
অ্যাপ কোনও অবস্থাতেই ডেটা-সীমাবদ্ধ নেটওয়ার্কের জন্য উপযুক্ত নয়।
যেমন, ভিডিও স্ট্রিমিংয়ের মতো হাই-ব্যান্ডউইথ অ্যাপের ক্ষেত্রে, ব্যবহারকারীর অভিজ্ঞতা যাতে
ভালো হয় তা নিশ্চিত করতে, ডেটা কম্প্রেশন ও কন্টেন্ট ডেলিভারি মেকানিজম
মূল্যায়ন করা উচিত। ডেটা সংক্রান্ত সীমাবদ্ধতার কারণে যদি খারাপ অভিজ্ঞতা এড়ানো না যায়,
তাহলে অ্যাপটিকে নিম্নলিখিত অ্যাকশন নিতে হবে:
- অ্যাপগুলি স্যাটেলাইট নেটওয়ার্ক ব্যবহার না করার সিদ্ধান্ত নিতে পারে, যদিও তারা এখনও একটি স্যাটেলাইট নেটওয়ার্কের উপস্থিতি শনাক্ত করতে পারে এবং ব্যবহারকারীকে জানাতে পারে যে তারা বিদ্যমান সীমিত নেটওয়ার্কে কাজ করবে না।
- সীমিত বা পরিবর্তন করার জন্য নির্দিষ্ট ব্যবহারের ক্ষেত্র শনাক্ত করুন। আপনার অ্যাপের কিছু ফিচার অন্যান্য ফিচারের তুলনায় সীমিত ডেটা ব্যবহারের ক্ষেত্রে আরও ভালভাবে কাজ করতে পারে। যেমন, টেক্সট মেসেজ পাঠানোর মতো কম ব্যান্ডউইথের অপারেশন অত্যন্ত নির্ভরযোগ্য। তবে, আনকমপ্রেসড HD ভিডিও আপলোড করার মতো হাই-ব্যান্ডউইথ অপারেশন করার সময় উল্লেখযোগ্য বাফারিং বা ব্যর্থতার অভিজ্ঞতা হতে পারে। এইসব ফিচারের জন্য আমরা অ্যাডাপ্টিভ বিটরেট স্ট্রিমিং বা রোবাস্ট কম্প্রেশন প্রয়োগ করার সাজেশন দিই। রোমিংয়ে থাকার সময় অনেক অ্যাপ যেভাবে কাজ করে, এটিও সেইরকম।
- আপনার অ্যাপ যেভাবে নেটওয়ার্ক রিসোর্স ব্যবহার করে তাতে পরিবর্তন করুন। অ্যাপ যখন নেটওয়ার্ক অপারেশন বার্স্ট হিসেবে পারফর্ম করে এবং বেশিরভাগ সময় নেটওয়ার্ক ব্যবহার করে না, তখন কনস্ট্রেনড নেটওয়ার্ক সবচেয়ে ভাল কাজ করে। পরিবর্তনশীল লেটেন্সি রিয়েল-টাইম সিঙ্ক্রোনাস যোগাযোগকে চ্যালেঞ্জিং করে তুলতে পারে।
এছাড়াও, আপনার অ্যাপ জটিল নেটওয়ার্কিং লজিক বা Firebase Cloud Messaging ব্যবহার করলে, আপনাকে নির্দিষ্ট কিছু পরিবর্তন করতে হবে।
সীমাবদ্ধ নেটওয়ার্কের জন্য অপ্টিমাইজ করা হিসেবে নিজেকে শনাক্ত করা
আপনার অ্যাপকে সীমাবদ্ধ নেটওয়ার্কের জন্য অপ্টিমাইজ করা হিসেবে শনাক্ত করতে এবং সেগুলি ব্যবহার করার জন্য বেছে নিতে, <meta-data> এলিমেন্ট সহ আপনার অ্যাপ ম্যানিফেস্ট ফাইল আপডেট করুন:
<meta-data android:name="android.telephony.PROPERTY_SATELLITE_DATA_OPTIMIZED"
android:value="PACKAGE_NAME" />
এই এলিমেন্ট আপনার অ্যাপকে সীমাবদ্ধ স্যাটেলাইট নেটওয়ার্ক ব্যবহার করার অনুমতি দেয়, যখন এটিই একমাত্র উপলভ্য নেটওয়ার্ক। এছাড়াও, এটি সিস্টেমকে জানায় যে আপনার অ্যাপটি সীমাবদ্ধ নেটওয়ার্কের জন্য অপ্টিমাইজ করা হয়েছে, সেটিংস অ্যাপে স্যাটেলাইট-চালিত অ্যাপের মধ্যে এটি তালিকাভুক্ত করে ব্যবহারকারীকে খুঁজে পেতে সাহায্য করে।
ডেটা ব্যবহারের উপর বিধিনিষেধ থাকলে, অ্যাপের আচরণ পরিবর্তন করুন
সীমাবদ্ধ নেটওয়ার্ক ব্যবহার করার সময় আপনার অ্যাপের আচরণ পরিবর্তন করতে হলে অথবা
আপনার অ্যাপে আগে থেকে থাকা লজিক যা নেটওয়ার্ক ব্যবহার ম্যানেজ করার জন্য
ConnectivityManager ব্যবহার করে, সেক্ষেত্রে আপনাকে
নেটওয়ার্ক ফ্লোতে কিছু পরিবর্তন করতে হবে।
সীমাবদ্ধ ডেটা শর্ত শনাক্ত করা
নেটওয়ার্ক অনুরোধের জন্য ব্যবহৃত NetworkCapabilities অবজেক্টে একটি
NET_CAPABILITY_NOT_BANDWIDTH_CONSTRAINED বিট থাকে যা
সব নেটওয়ার্কে ডিফল্ট হিসেবে সেট করা থাকে এবং ব্যান্ডউইথ-সীমাবদ্ধ নেটওয়ার্কে সরিয়ে দেওয়া হয়। কোনও নেটওয়ার্কে ব্যান্ডউইথ-সংক্রান্ত সীমাবদ্ধতা আছে কিনা তা আপনি নির্ধারণ করতে পারবেন।
এটি করার জন্য, নেটওয়ার্কে NET_CAPABILITY_NOT_BANDWIDTH_CONSTRAINED ক্ষমতা আছে কিনা তা চেক করুন।
সীমাবদ্ধ নেটওয়ার্কের সাথে কাজ করা
NetworkRequest অবজেক্টে ডিফল্ট হিসেবে
NET_CAPABILITY_NOT_BANDWIDTH_CONSTRAINED ক্ষমতাও অন্তর্ভুক্ত থাকে। সীমাবদ্ধ নেটওয়ার্ক গ্রহণযোগ্য তা বোঝাতে এই
ক্ষমতা সরিয়ে দিন।
আপনি যখন শনাক্ত করেন যে আপনি একটি সীমাবদ্ধ নেটওয়ার্কের সাথে কানেক্ট করেছেন, তখন আপনি প্রয়োজন অনুযায়ী আপনার অ্যাপের ফিচার মানিয়ে নিতে পারেন:
Kotlin
val HandlerThread = HandlerThread("SatelliteNetworkMonitor" handlerThread.start() val handler = Handler(handlerThread.getLooper()) // Make the network request. val request = NetworkRequest.Builder() .addCapability(NET_CAPABILITY_INTERNET .removeCapability(NET_CAPABILITY_NOT_BANDWIDTH_CONSTRAINED) .build() // Register for the callback. val callback = NetworkCallback() { override fun onCapabilitiesChanged(net: Network, nc: NetWorkCapabilities) { updateAppUseCases(net, nc) } fun updateAppUseCases(net: Network, nc: NetworkCapabilities) { // Check if the network is bandwidth-constrained or if the transport is satellite. // Checking for the satellite transport is to make sure that application // continue to have optimized behavior on satellite networks irrespective of whether // the NET_CAPABILITY_NOT_BANDWIDTH_CONSTRAINED capability is set or not. This is // because the capability can be removed on an unconstraned satellite Network which only // means applications does not need to modify to get data access but should continue // to optimize for data usage. if (!nc.hasCapability(NET_CAPABILITY_NOT_BANDWIDTH_CONSTRAINED) || nc.hasTransport(NetworkCapabilities.TRANSPORT_SATELLITE)) { // Adapt to constrained network or disable heavy data usage features. ... } else { // Revert to non optimized behavior for data usage ... } } } // Where cm is your ConnectivityManager object: cm.registerBestMatchingNetworkCallback(request, callback, handler)
জাভা
HandlerThread handlerThread = new HandlerThread("SatelliteNetworkMonitor"); handlerThread.start(); Handler handler = new Handler(handlerThread.getLooper()); // Make the network request. NetworkRequest request = new NetworkRequest.Builder() .addCapability(NET_CAPABILITY_INTERNET) .removeCapability(NET_CAPABILITY_NOT_BANDWIDTH_CONSTRAINED) .build(); // Register for the callback. NetworkCallback callback = new NetworkCallback() { @Override public void onCapabilitiesChanged(Network net, NetworkCapabilities nc) { updateAppUsecases(net, nc); } private void updateAppUsecases(Network net, NetworkCapabilities nc) { // Check if the network is bandwidth-constrained or if the transport is satellite. // Checking for the satellite transport is to make sure that application // continue to have optimized behavior on satellite networks irrespective of whether // the NET_CAPABILITY_NOT_BANDWIDTH_CONSTRAINED capability is set or not. This is // because the capability can be removed on an unconstraned satellite Network which only // means applications does not need to modify to get data access but should continue // to optimize for data usage. if (!nc.hasCapability(NET_CAPABILITY_NOT_BANDWIDTH_CONSTRAINED) || nc.hasTransport(NetworkCapabilities.TRANSPORT_SATELLITE)) { // Adapt to constrained network or disable heavy data usage features. ... } else { // Revert to non optimized behavior for data usage ... } } }; // Where cm is your ConnectivityManager object: cm.registerBestMatchingNetworkCallback(request, callback, handler);
সীমাবদ্ধ নেটওয়ার্কে FCM মেসেজ পান
আপনার অ্যাপ যদি অ্যাপ সার্ভার থেকে মেসেজ পাওয়ার জন্য Firebase Cloud Messaging (FCM) ব্যবহার করে, তাহলে আপনি FCM সার্ভারে মেসেজ পাঠানোর সময় bandwidth_constrained_ok ফ্ল্যাগ অন্তর্ভুক্ত করে
উল্লেখ করতে পারেন যে সীমাবদ্ধ নেটওয়ার্কেও নির্দিষ্ট মেসেজ ডেলিভার করা উচিত:
{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification":{
"title":"Portugal vs. Denmark",
"body":"great match!"
}
"android": {
"bandwidth_constrained_ok": true
}
}
}
কোনও মেসেজে এই ফ্ল্যাগ না থাকলে, FCM সার্ভার শুধুমাত্র তখনই এটি ডেলিভার করে যখন ডিভাইসটি কোনও আনকনস্ট্রেইন্ড নেটওয়ার্কের মাধ্যমে কানেক্ট করা থাকে।