স্যাটেলাইট নেটওয়ার্কগুলি একদিন পর্যাপ্ত শক্তিশালী হবে সাধারণ নেটওয়ার্ক হিসাবে কাজ করতে এবং সমস্ত অ্যাপ ব্যবহারের ক্ষেত্রে নির্বিঘ্নে কাজ করবে; কিন্তু আপাতত, এই নেটওয়ার্কগুলিতে ডেটা একটি দুর্লভ সম্পদ। ডেটা ব্যবহারে সীমাবদ্ধতা সহ একটি স্যাটেলাইট-ভিত্তিক নেটওয়ার্ককে সীমাবদ্ধ স্যাটেলাইট নেটওয়ার্ক বলা হয়।
এই সীমাবদ্ধতার কারণে, Android অ্যাপগুলি ডিফল্টরূপে এই নেটওয়ার্কগুলি ব্যবহার করে না৷ আপনি যদি আপনার অ্যাপটি সীমাবদ্ধ স্যাটেলাইট নেটওয়ার্কে কাজ করতে চান, তাহলে আপনাকে অবশ্যই আপনার অ্যাপটিকে স্যাটেলাইট ডেটা ব্যবহারের জন্য অপ্টিমাইজ করা হিসাবে চিহ্নিত করতে হবে এবং একটি সীমাবদ্ধ স্যাটেলাইট নেটওয়ার্কের সাথে সংযুক্ত থাকাকালীন সম্পদ সংরক্ষণের জন্য আপনার অ্যাপের ব্যবহারের ক্ষেত্রে মানিয়ে নিতে হবে ।
আপনার অ্যাপের ব্যবহারের ক্ষেত্রে মানিয়ে নিন
আপনার অ্যাপটিকে সীমাবদ্ধ স্যাটেলাইট নেটওয়ার্কগুলি অ্যাক্সেস করার অনুমতি দেওয়ার জন্য আপনাকে যা করতে হবে তা বেছে নেওয়া হয়েছে, তবে সীমিত নেটওয়ার্ক সংস্থানগুলিকে দায়িত্বের সাথে ব্যবহার করার জন্য আপনার অ্যাপের আচরণকে অপ্টিমাইজ করার জন্য আপনাকে আরও পরিবর্তন করতে হতে পারে। আপনি যখন সীমাবদ্ধ ডেটা ব্যবহারের জন্য অপ্টিমাইজ করবেন তখন এখানে কিছু বিষয় বিবেচনা করতে হবে:
- আপনার অ্যাপ সীমাবদ্ধ নেটওয়ার্কে ব্যবহারের জন্য উপযুক্ত কিনা তা নির্ধারণ করুন। কিছু অ্যাপ্লিকেশান কোনও পরিস্থিতিতে ডেটা-সীমাবদ্ধ নেটওয়ার্কগুলির জন্য উপযুক্ত নয়৷ উদাহরণস্বরূপ, ভিডিও স্ট্রিমিং অ্যাপগুলি স্যাটেলাইট নেটওয়ার্কগুলি ব্যবহার না করা বেছে নিতে পারে, যদিও তারা এখনও একটি স্যাটেলাইট নেটওয়ার্কের উপস্থিতি সনাক্ত করতে পারে এবং ব্যবহারকারীকে জানাতে পারে যে তারা বিদ্যমান সীমিত নেটওয়ার্কে কাজ করবে না।
- সীমাবদ্ধ বা পরিবর্তন করতে নির্দিষ্ট ব্যবহারের ক্ষেত্রে চিহ্নিত করুন। আপনার অ্যাপের কিছু বৈশিষ্ট্য অন্যদের তুলনায় সীমিত ডেটা অবস্থার জন্য আরও উপযুক্ত হতে পারে। উদাহরণস্বরূপ, পাঠ্য বার্তা পাঠানো ভাল কাজ করবে, কিন্তু HD ভিডিও আপলোড করার চেষ্টা করলে ব্যবহারকারীর অভিজ্ঞতা খারাপ হতে পারে। এটি রোমিংয়ের সময় অনেক অ্যাপের আচরণের পরিবর্তনের মতো।
- আপনার অ্যাপ যেভাবে নেটওয়ার্ক রিসোর্স ব্যবহার করে তা মানিয়ে নিন। সীমাবদ্ধ নেটওয়ার্কগুলি সবচেয়ে ভাল কাজ করে যখন অ্যাপগুলি বিস্ফোরণে নেটওয়ার্ক ক্রিয়াকলাপ সম্পাদন করে এবং বেশিরভাগ সময় নেটওয়ার্ক ব্যবহার না করে ব্যয় করে। ধ্রুবক বা চ্যাট নেটওয়ার্ক ট্রাফিক তৈরি করা এড়িয়ে চলুন। উদাহরণস্বরূপ, পুশ-টু-টক অডিও রিয়েল-টাইম অডিও কলের চেয়ে সীমাবদ্ধ নেটওয়ার্ক অবস্থার জন্য অনেক বেশি উপযুক্ত।
আপনার অ্যাপ যদি জটিল নেটওয়ার্কিং লজিক বা ফায়ারবেস ক্লাউড মেসেজিং ব্যবহার করে তাহলে আপনাকে নির্দিষ্ট পরিবর্তন করতে হবে।
সীমাবদ্ধ নেটওয়ার্কগুলির জন্য অপ্টিমাইজ করা হিসাবে স্ব-পরিচয়
আপনার অ্যাপটিকে সীমাবদ্ধ নেটওয়ার্কের জন্য অপ্টিমাইজ করা হিসাবে চিহ্নিত করতে এবং সেগুলি ব্যবহার করার জন্য বেছে নিতে, একটি <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
ক্ষমতাও অন্তর্ভুক্ত করে। সীমাবদ্ধ নেটওয়ার্কগুলি গ্রহণযোগ্য তা নির্দেশ করার জন্য এই ক্ষমতাটি সরান৷
আপনি যখন শনাক্ত করেন যে আপনি একটি সীমাবদ্ধ নেটওয়ার্কের সাথে সংযুক্ত হয়েছেন, তখন আপনি আপনার অ্যাপের বৈশিষ্ট্যগুলিকে প্রয়োজন অনুযায়ী মানিয়ে নিতে পারেন:
কোটলিন
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) { 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 unconstrained behavior. ... } } } // 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) { 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 unconstrained behavior. ... } } }; // Where cm is your ConnectivityManager object: cm.registerBestMatchingNetworkCallback(request, callback, handler);
সীমাবদ্ধ নেটওয়ার্কগুলিতে FCM বার্তাগুলি গ্রহণ করুন৷
যদি আপনার অ্যাপ ফায়ারবেস ক্লাউড মেসেজিং (FCM) ব্যবহার করে কোনো অ্যাপ সার্ভার থেকে বার্তা গ্রহণ করে, তাহলে আপনি নির্দেশ করতে পারেন যে FCM সার্ভারে বার্তা পাঠানোর সময় bandwidth_constrained_ok
ফ্ল্যাগ অন্তর্ভুক্ত করে সীমাবদ্ধ নেটওয়ার্কেও একটি নির্দিষ্ট বার্তা পাঠানো উচিত:
{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification":{
"title":"Portugal vs. Denmark",
"body":"great match!"
}
"android": {
"bandwidth_constrained_ok": true
}
}
}
যদি একটি বার্তা এই পতাকা অন্তর্ভুক্ত না করে, তাহলে FCM সার্ভার শুধুমাত্র এটি প্রদান করে যখন ডিভাইসটি একটি অনিয়ন্ত্রিত নেটওয়ার্কের মাধ্যমে সংযুক্ত থাকে।