ستصبح شبكات الأقمار الصناعية في يوم من الأيام قوية بما يكفي لتعمل كشبكات عادية وتتكامل بسلاسة مع جميع حالات استخدام التطبيقات، ولكن في الوقت الحالي، تُعد البيانات على هذه الشبكات موردًا نادرًا. تُعرف الشبكة المستندة إلى الأقمار الصناعية والتي تتضمّن قيودًا على استخدام البيانات باسم شبكة أقمار صناعية محدودة.
وبسبب هذه القيود، لا تستخدم تطبيقات Android هذه الشبكات تلقائيًا. إذا كنت تريد أن يعمل تطبيقك على شبكات الأقمار الصناعية ذات النطاق الترددي المحدود، عليك تحديد تطبيقك على أنّه محسّن لاستخدام بيانات الأقمار الصناعية وتعديل حالات استخدام تطبيقك للحفاظ على الموارد عند الاتصال بشبكة أقمار صناعية ذات نطاق ترددي محدود.
تكييف حالات استخدام تطبيقك
كل ما عليك فعله للسماح لتطبيقك بالوصول إلى شبكات الأقمار الصناعية ذات النطاق الترددي المحدود هو الموافقة على ذلك، ولكن قد تحتاج إلى إجراء المزيد من التغييرات لتحسين سلوك تطبيقك واستخدام موارد الشبكة المحدودة بشكل مسؤول. في ما يلي بعض الأمور التي يجب مراعاتها عند تحسين الأداء في حال محدودية استخدام البيانات:
- تحديد ما إذا كان تطبيقك مناسبًا للاستخدام على الشبكات ذات النطاق الترددي المحدود بعض التطبيقات غير مناسبة للشبكات التي تفرض قيودًا على البيانات في أي حال من الأحوال. على سبيل المثال، قد تختار تطبيقات بث الفيديو عدم استخدام شبكات الأقمار الصناعية على الإطلاق، ولكن سيظل بإمكانها رصد توفّر شبكة أقمار صناعية وإبلاغ المستخدم بأنّها لن تعمل على الشبكة المحدودة الحالية.
- تحديد حالات استخدام معيّنة لفرض قيود عليها أو تعديلها قد تكون بعض ميزات تطبيقك أكثر ملاءمةً لظروف البيانات المحدودة من غيرها. على سبيل المثال، يمكن إرسال رسائل نصية بشكل جيد، ولكن محاولة تحميل فيديو بدقة عالية قد تؤدي إلى تجربة مستخدم سيئة. وهذا يشبه الطريقة التي تغيّر بها العديد من التطبيقات سلوكها عند التجوال.
- تكييف طريقة استخدام تطبيقك لموارد الشبكة: تعمل الشبكات ذات النطاق الترددي المحدود بشكل أفضل عندما تنفّذ التطبيقات عمليات الشبكة على دفعات وتقضي معظم الوقت بدون استخدام الشبكة. تجنَّب إنشاء عدد كبير من طلبات الشبكة أو طلبات الدردشة. على سبيل المثال، يكون الصوت الذي يتم إرساله عند الضغط على الزر أفضل بكثير في ظروف الشبكة المحدودة مقارنةً بالمكالمات الصوتية في الوقت الفعلي.
هناك أيضًا تغييرات محدّدة عليك إجراؤها إذا كان تطبيقك يستخدم منطق شبكات معقّدًا أو المراسلة عبر السحابة الإلكترونية من 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 إلا عندما يكون الجهاز متصلاً بشبكة غير محدودة.