एक दिन ऐसा आएगा, जब सैटेलाइट नेटवर्क सामान्य नेटवर्क की तरह काम करेंगे. साथ ही, ये सभी ऐप्लिकेशन के साथ आसानी से काम करेंगे. हालांकि, फ़िलहाल इन नेटवर्क पर डेटा उपलब्ध नहीं है. सैटलाइट पर आधारित ऐसे नेटवर्क को डेटा के इस्तेमाल पर पाबंदी वाला सैटलाइट नेटवर्क कहा जाता है जिसमें डेटा के इस्तेमाल पर पाबंदियां होती हैं.
इन सीमाओं की वजह से, Android ऐप्लिकेशन डिफ़ॉल्ट रूप से इन नेटवर्क का इस्तेमाल नहीं करते. अगर आपको अपने ऐप्लिकेशन को सीमित बैंडविड्थ वाले सैटलाइट नेटवर्क पर चलाना है, तो आपको अपने ऐप्लिकेशन को सैटलाइट डेटा के इस्तेमाल के लिए ऑप्टिमाइज़ किया गया है के तौर पर पहचानना होगा. साथ ही, अपने ऐप्लिकेशन के इस्तेमाल के उदाहरणों को इस तरह से ढालना होगा कि सीमित बैंडविड्थ वाले सैटलाइट नेटवर्क से कनेक्ट होने पर संसाधनों को बचाया जा सके.
अपने ऐप्लिकेशन के इस्तेमाल के उदाहरणों को अडैप्ट करना
अपने ऐप्लिकेशन को सीमित बैंडविड्थ वाले सैटलाइट नेटवर्क का ऐक्सेस देने के लिए, आपको सिर्फ़ ऑप्ट-इन करना होगा. हालांकि, सीमित नेटवर्क संसाधनों का ज़िम्मेदारी से इस्तेमाल करने के लिए, आपको अपने ऐप्लिकेशन के व्यवहार को ऑप्टिमाइज़ करने के लिए कुछ और बदलाव करने पड़ सकते हैं. डेटा के सीमित इस्तेमाल के लिए ऑप्टिमाइज़ करते समय, इन बातों का ध्यान रखें:
- सैटलाइट नेटवर्क, ज़मीन पर मौजूद एलटीई/5G नेटवर्क की तुलना में ज़्यादा मुश्किल परिस्थितियों में काम करते हैं. इनकी थ्रूपुट कम होती है और लेटेंसी ज़्यादा होती है. आम तौर पर, हम भरोसेमंद होने की वजह से डेटा के इस्तेमाल को कम करने का सुझाव देते हैं. हालांकि, हर ऐप्लिकेशन अलग होता है. आपको अपने इस्तेमाल के खास उदाहरणों का आकलन करना चाहिए. इससे यह तय करने में मदद मिलेगी कि डेटा ऑप्टिमाइज़ करने की आपकी मौजूदा रणनीतियां, सीमित संसाधनों वाले इन एनवायरमेंट में उपयोगकर्ताओं को बेहतर अनुभव दे पाती हैं या नहीं.
- तय करें कि आपका ऐप्लिकेशन, सीमित बैंडविथ वाले नेटवर्क पर इस्तेमाल करने के लिए सही है या नहीं. कुछ ऐप्लिकेशन, डेटा की सीमा वाले नेटवर्क के लिए किसी भी स्थिति में सही नहीं होते.
उदाहरण के लिए, वीडियो स्ट्रीमिंग जैसे ज़्यादा बैंडविड्थ वाले ऐप्लिकेशन को डेटा कंप्रेस करने और कॉन्टेंट डिलीवर करने के तरीकों का आकलन करना चाहिए. इससे यह पक्का किया जा सकेगा कि उपयोगकर्ता को ऐप्लिकेशन इस्तेमाल करने का अच्छा अनुभव मिले. अगर डेटा की कमी की वजह से, उपयोगकर्ता अनुभव को बेहतर नहीं बनाया जा सकता, तो ऐप्लिकेशन को ये कार्रवाइयां करनी चाहिए:
- ऐप्लिकेशन, सैटलाइट नेटवर्क का इस्तेमाल न करने का विकल्प चुन सकते हैं. हालांकि, वे अब भी सैटलाइट नेटवर्क की मौजूदगी का पता लगा सकते हैं. साथ ही, उपयोगकर्ता को यह सूचना दे सकते हैं कि वे मौजूदा सीमित नेटवर्क पर काम नहीं करेंगे.
- इस्तेमाल के कुछ उदाहरणों की पहचान करें, ताकि उन्हें सीमित किया जा सके या उनमें बदलाव किया जा सके. आपके ऐप्लिकेशन की कुछ सुविधाएं, सीमित डेटा की स्थितियों के लिए अन्य सुविधाओं की तुलना में ज़्यादा सही हो सकती हैं. उदाहरण के लिए, कम बैंडविथ वाली कार्रवाइयां, जैसे कि मैसेज भेजना बहुत भरोसेमंद होती हैं. हालांकि, ज़्यादा बैंडविथ की ज़रूरत वाली कार्रवाइयों, जैसे कि बिना कंप्रेस किए गए एचडी वीडियो को अपलोड करने में, बफ़रिंग की समस्या आ सकती है या वीडियो अपलोड नहीं हो सकता. हमारा सुझाव है कि इन सुविधाओं के लिए, अडैप्टिव बिटरेट स्ट्रीमिंग या बेहतर कंप्रेशन का इस्तेमाल करें. यह उस तरीके के जैसा है जिसमें कई ऐप्लिकेशन रोमिंग के दौरान काम करने का तरीका बदल देते हैं.
- अपने ऐप्लिकेशन में नेटवर्क संसाधनों के इस्तेमाल के तरीके में बदलाव करें. बैंडविड्थ की सीमा वाले नेटवर्क तब सबसे अच्छी तरह से काम करते हैं, जब ऐप्लिकेशन नेटवर्क ऑपरेशन को एक साथ कई बार करते हैं और ज़्यादातर समय नेटवर्क का इस्तेमाल नहीं करते हैं. लेटेंसी में बदलाव होने की वजह से, रीयल-टाइम में सिंक्रोनस कम्यूनिकेशन करना मुश्किल हो सकता है.
अगर आपका ऐप्लिकेशन जटिल नेटवर्किंग लॉजिक या 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) { 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)
Java
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 मैसेज पाना
अगर आपका ऐप्लिकेशन, ऐप्लिकेशन सर्वर से मैसेज पाने के लिए 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 सर्वर उसे सिर्फ़ तब डिलीवर करता है, जब डिवाइस किसी ऐसे नेटवर्क से कनेक्ट हो जिस पर कोई पाबंदी न हो.