تطوير التطبيقات لشبكات الأقمار الصناعية ذات النطاق الترددي المحدود

ستصبح شبكات الأقمار الصناعية يومًا ما قوية بما يكفي لتعمل كشبكات عادية وتعمل بسلاسة مع جميع حالات استخدام التطبيقات، ولكن في الوقت الحالي، تُعدّ البيانات على هذه الشبكات موردًا نادرًا. تُعرف الشبكة المستندة إلى القمر الصناعي والتي تفرض قيودًا على استخدام البيانات باسم شبكة القمر الصناعي المقيَّدة.

بسبب هذه القيود، لا تستخدم تطبيقات Android هذه الشبكات تلقائيًا. إذا أردت أن يعمل تطبيقك على شبكات الأقمار الصناعية المحدودة، عليك تحديد تطبيقك على أنّه محسّن لاستخدام بيانات الأقمار الصناعية وتكييف حالات استخدام تطبيقك للحفاظ على الموارد عند الاتصال بشبكة أقمار صناعية محدودة.

تكييف حالات استخدام تطبيقك

للسماح لتطبيقك بالوصول إلى شبكات الأقمار الصناعية المحدودة، ما عليك سوى الموافقة، ولكن قد تحتاج إلى إجراء تغييرات إضافية لتحسين سلوك تطبيقك لاستخدام موارد الشبكة المحدودة بشكل مسؤول. في ما يلي بعض الأمور التي يجب مراعاتها عند تحسين استخدام البيانات المحدودة:

  • تعمل شبكات الأقمار الصناعية في ظروف أكثر تقييدًا من شبكات LTE/5G الأرضية، وتتميز بمعدل نقل بيانات أقل ووقت استجابة أعلى. ننصح عمومًا بتقليل استخدام البيانات لأسباب تتعلق بالموثوقية، ولكن كل تطبيق له خصائصه الفريدة. يجب تقييم حالات الاستخدام المحدّدة لتحديد ما إذا كانت استراتيجيات تحسين البيانات الحالية توفّر تجربة مستخدم مقبولة في هذه البيئات المقيَّدة.
  • تحديد ما إذا كان تطبيقك مناسبًا للاستخدام على الشبكات المحدودة: بعض التطبيقات لا تناسب الشبكات ذات البيانات المحدودة تحت أي ظرف من الظروف. على سبيل المثال، يجب أن تقيّم التطبيقات التي تستهلك معدّل نقل بيانات مرتفعًا، مثل تطبيقات بث الفيديو، آليات ضغط البيانات وإرسال المحتوى لضمان توفير تجربة مستخدم فعّالة. إذا كان من غير الممكن تجنُّب تدهور تجربة المستخدم بسبب قيود البيانات، يجب أن يتّخذ التطبيق الإجراءات التالية:
    1. قد تختار التطبيقات عدم استخدام شبكات الأقمار الصناعية على الإطلاق، ومع ذلك قد تظل قادرة على تحديد توفّر شبكة أقمار صناعية وإبلاغ المستخدم بأنّها لن تعمل على الشبكة المحدودة الحالية.
    2. تحديد حالات استخدام معيّنة لفرض قيود عليها أو تعديلها: قد تكون بعض ميزات تطبيقك مناسبة لظروف البيانات المحدودة أكثر من غيرها. على سبيل المثال، العمليات ذات النطاق الترددي المنخفض مثل إرسال الرسائل النصية موثوقة للغاية. ومع ذلك، فإن العمليات التي تتطلب معدل نقل بيانات مرتفع، مثل تحميل فيديو عالي الدقة غير مضغوط، قد تواجه تخزينًا مؤقتًا كبيرًا أو فشلاً. ننصحك بتطبيق ميزة "البث التكيُّفي لمعدل نقل البيانات" أو ميزة "الضغط القوي" لهذه الميزات التي تتطلّب موارد كثيرة. ويشبه ذلك الطريقة التي تغيّر بها العديد من التطبيقات سلوكها عند التجوال.
    3. تعديل طريقة استخدام تطبيقك لموارد الشبكة: تعمل الشبكات المقيَّدة على أفضل نحو عندما تنفّذ التطبيقات عمليات الشبكة على دفعات ولا تستخدم الشبكة معظم الوقت. يمكن أن يؤدي وقت الاستجابة المتغيّر إلى صعوبة التواصل المتزامن في الوقت الفعلي.

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

عند اكتشاف أنّك متصل بشبكة محدودة، يمكنك تكييف ميزات تطبيقك حسب الحاجة:

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 = object : 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)

تلقّي رسائل 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 إلا عندما يكون الجهاز متصلاً بشبكة غير مقيّدة.