ستصبح شبكات الأقمار الصناعية في يوم من الأيام قوية بما يكفي لتعمل كشبكات عادية وتتكامل بسلاسة مع جميع حالات استخدام التطبيقات، ولكن في الوقت الحالي، تُعد البيانات على هذه الشبكات موردًا نادرًا. تُعرف الشبكة المستندة إلى الأقمار الصناعية والتي تتضمّن قيودًا على استخدام البيانات باسم شبكة أقمار صناعية محدودة.
وبسبب هذه القيود، لا تستخدم تطبيقات Android هذه الشبكات تلقائيًا. إذا كنت تريد أن يعمل تطبيقك على شبكات الأقمار الصناعية ذات النطاق الترددي المحدود، عليك تحديد تطبيقك على أنّه محسّن لاستخدام بيانات الأقمار الصناعية وتعديل حالات استخدام تطبيقك للحفاظ على الموارد عند الاتصال بشبكة أقمار صناعية ذات نطاق ترددي محدود.
تكييف حالات استخدام تطبيقك
كل ما عليك فعله للسماح لتطبيقك بالوصول إلى شبكات الأقمار الصناعية ذات النطاق الترددي المحدود هو الموافقة على ذلك، ولكن قد تحتاج إلى إجراء تغييرات إضافية لتحسين سلوك تطبيقك واستخدام موارد الشبكة المحدودة بشكل مسؤول. في ما يلي بعض الأمور التي يجب مراعاتها عند تحسين الأداء في حال محدودية استخدام البيانات:
- تعمل شبكات الأقمار الصناعية في ظروف أكثر تقييدًا من شبكات LTE/5G الأرضية، وتتميز بمعدل نقل بيانات أقل وزمن استجابة أطول. مع أنّنا ننصح عمومًا بتقليل استخدام البيانات لأسباب تتعلّق بالموثوقية، إلا أنّ كل تطبيق فريد من نوعه. عليك تقييم حالات الاستخدام المحدّدة لتحديد ما إذا كانت استراتيجيات تحسين البيانات الحالية توفّر تجربة مستخدم مقبولة في هذه البيئات ذات الموارد المحدودة.
- تحديد ما إذا كان تطبيقك مناسبًا للاستخدام على الشبكات ذات النطاق الترددي المحدود: لا تتوافق بعض التطبيقات مع الشبكات ذات سعة البيانات المحدودة في أي حال من الأحوال.
على سبيل المثال، يجب أن تقيِّم التطبيقات التي تتطلّب معدّل نقل بيانات عاليًا، مثل تطبيقات بث الفيديو، آليات ضغط البيانات وتسليم المحتوى لضمان توفير تجربة مستخدم فعّالة. إذا كان من المحتّم تقديم تجربة منخفضة الجودة بسبب قيود البيانات،
يجب أن يتّخذ التطبيق الإجراءات التالية:
- قد تختار التطبيقات عدم استخدام شبكات الأقمار الصناعية على الإطلاق، ولكن سيظل بإمكانها رصد توفّر شبكة أقمار صناعية وإبلاغ المستخدم بأنّها لن تعمل على الشبكة المحدودة الحالية.
- تحديد حالات استخدام معيّنة لفرض قيود عليها أو تعديلها: قد تكون بعض ميزات تطبيقك أكثر ملاءمةً لظروف البيانات المحدودة من غيرها. على سبيل المثال، العمليات التي تتطلّب نطاقًا تردديًا منخفضًا، مثل إرسال الرسائل النصية، تكون موثوقة للغاية. ومع ذلك، قد تحدث مشاكل كبيرة في التخزين المؤقت أو فشل في العمليات التي تتطلّب معدل نقل بيانات عاليًا، مثل تحميل فيديو عالي الدقة غير مضغوط. ننصحك بتنفيذ بث معدل البت التكيّفي أو الضغط القوي لهذه الميزات التي تتطلّب معدل نقل بيانات مرتفعًا. وهذا يشبه الطريقة التي تغيّر بها العديد من التطبيقات سلوكها عند التجوال.
- تكييف طريقة استخدام تطبيقك لموارد الشبكة: تعمل الشبكات ذات النطاق الترددي المحدود على النحو الأمثل عندما تنفّذ التطبيقات عمليات الشبكة على دفعات وتقضي معظم الوقت بدون استخدام الشبكة. يمكن أن يؤدي تأخُّر الاستجابة المتفاوت إلى صعوبة التواصل المتزامن في الوقت الفعلي.
هناك أيضًا تغييرات محدّدة عليك إجراؤها إذا كان تطبيقك يستخدم منطق شبكات معقّدًا أو المراسلة عبر السحابة الإلكترونية من Firebase.
تحديد أنّ التطبيق محسّن للشبكات ذات النطاق الترددي المحدود
لتحديد أنّ تطبيقك محسّن للشبكات ذات النطاق الترددي المحدود والموافقة على استخدامها، عدِّل ملف بيان التطبيق بإضافة عنصر <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 (FCM) لتلقّي الرسائل
من خادم تطبيق، يمكنك الإشارة إلى أنّه يجب تسليم رسالة معيّنة
حتى على الشبكات ذات النطاق الترددي المحدود من خلال تضمين العلامة bandwidth_constrained_ok
عند تمرير الرسالة إلى خادم FCM:
{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification":{
"title":"Portugal vs. Denmark",
"body":"great match!"
}
"android": {
"bandwidth_constrained_ok": true
}
}
}
إذا لم تتضمّن الرسالة هذه العلامة، لن يرسلها خادم FCM إلا عندما يكون الجهاز متصلاً من خلال شبكة غير محدودة.