সীমাবদ্ধ স্যাটেলাইট নেটওয়ার্কের জন্য বিকাশ করুন

স্যাটেলাইট নেটওয়ার্কগুলি একদিন স্বাভাবিক নেটওয়ার্ক হিসেবে কাজ করার জন্য যথেষ্ট শক্তিশালী হবে এবং সমস্ত অ্যাপ ব্যবহারের ক্ষেত্রে নির্বিঘ্নে কাজ করবে; কিন্তু আপাতত, এই নেটওয়ার্কগুলিতে ডেটা একটি দুর্লভ সম্পদ। ডেটা ব্যবহারের সীমাবদ্ধতা সহ একটি স্যাটেলাইট-ভিত্তিক নেটওয়ার্ককে সীমাবদ্ধ স্যাটেলাইট নেটওয়ার্ক বলা হয়।

এই সীমাবদ্ধতার কারণে, অ্যান্ড্রয়েড অ্যাপগুলি ডিফল্টরূপে এই নেটওয়ার্কগুলি ব্যবহার করে না। আপনি যদি চান যে আপনার অ্যাপটি সীমাবদ্ধ স্যাটেলাইট নেটওয়ার্কগুলিতে কাজ করুক, তাহলে আপনাকে অবশ্যই আপনার অ্যাপটিকে স্যাটেলাইট ডেটা ব্যবহারের জন্য অপ্টিমাইজ করা হিসাবে চিহ্নিত করতে হবে এবং সীমাবদ্ধ স্যাটেলাইট নেটওয়ার্কের সাথে সংযুক্ত থাকাকালীন সম্পদ সংরক্ষণের জন্য আপনার অ্যাপের ব্যবহারের ক্ষেত্রে মানিয়ে নিতে হবে

আপনার অ্যাপের ব্যবহারের ধরণগুলি মানিয়ে নিন

আপনার অ্যাপকে সীমাবদ্ধ স্যাটেলাইট নেটওয়ার্ক অ্যাক্সেস করার অনুমতি দেওয়ার জন্য আপনাকে যা করতে হবে তা হল অপ্ট-ইন করা, তবে সীমিত নেটওয়ার্ক রিসোর্সগুলিকে দায়িত্বের সাথে ব্যবহার করার জন্য আপনার অ্যাপের আচরণ অপ্টিমাইজ করার জন্য আপনাকে আরও পরিবর্তন করতে হতে পারে। সীমাবদ্ধ ডেটা ব্যবহারের জন্য অপ্টিমাইজ করার সময় এখানে কিছু বিষয় বিবেচনা করতে হবে:

  • স্যাটেলাইট নেটওয়ার্কগুলি টেরেস্ট্রিয়াল LTE/5G নেটওয়ার্কের তুলনায় উল্লেখযোগ্যভাবে বেশি সীমাবদ্ধ পরিস্থিতিতে কাজ করে , যার বৈশিষ্ট্য হল কম থ্রুপুট এবং উচ্চতর ল্যাটেন্সি। যদিও আমরা সাধারণত নির্ভরযোগ্যতার কারণে ডেটা ব্যবহার কমানোর পরামর্শ দিই, প্রতিটি অ্যাপই অনন্য। আপনার বর্তমান ডেটা অপ্টিমাইজেশন কৌশলগুলি এই সীমাবদ্ধ পরিবেশে গ্রহণযোগ্য ব্যবহারকারীর অভিজ্ঞতা প্রদান করে কিনা তা নির্ধারণ করার জন্য আপনার নির্দিষ্ট ব্যবহারের ক্ষেত্রে মূল্যায়ন করা উচিত।
  • আপনার অ্যাপটি সীমাবদ্ধ নেটওয়ার্কগুলিতে ব্যবহারের জন্য উপযুক্ত কিনা তা নির্ধারণ করুন। কিছু অ্যাপ কোনও পরিস্থিতিতেই ডেটা-সীমাবদ্ধ নেটওয়ার্কগুলির জন্য উপযুক্ত নয়। উদাহরণস্বরূপ, ভিডিও স্ট্রিমিংয়ের মতো উচ্চ-ব্যান্ডউইথ অ্যাপগুলির কার্যকরী ব্যবহারকারীর অভিজ্ঞতা নিশ্চিত করার জন্য তাদের ডেটা সংকোচন এবং সামগ্রী সরবরাহের প্রক্রিয়াগুলি মূল্যায়ন করা উচিত। ডেটা সীমাবদ্ধতার কারণে যদি অভিজ্ঞতা হ্রাস না করা অনিবার্য হয়, তবে অ্যাপটির নিম্নলিখিত পদক্ষেপ নেওয়া উচিত:
    1. অ্যাপগুলি স্যাটেলাইট নেটওয়ার্ক একেবারেই ব্যবহার না করার সিদ্ধান্ত নিতে পারে , যদিও তারা এখনও একটি স্যাটেলাইট নেটওয়ার্কের উপস্থিতি সনাক্ত করতে পারে এবং ব্যবহারকারীকে জানাতে পারে যে তারা বিদ্যমান সীমিত নেটওয়ার্কে কাজ করবে না।
    2. নির্দিষ্ট ব্যবহারের ক্ষেত্রে সীমাবদ্ধতা বা পরিবর্তনের জন্য চিহ্নিত করুন। আপনার অ্যাপের কিছু বৈশিষ্ট্য সীমিত ডেটা অবস্থার জন্য অন্যদের তুলনায় বেশি উপযুক্ত হতে পারে। উদাহরণস্বরূপ, টেক্সট বার্তা পাঠানোর মতো কম-ব্যান্ডউইথ অপারেশনগুলি অত্যন্ত নির্ভরযোগ্য। তবে, উচ্চ-ব্যান্ডউইথ অপারেশনগুলি, যেমন আনকম্প্রেসড এইচডি ভিডিও আপলোড করা, উল্লেখযোগ্য বাফারিং বা ব্যর্থতার সম্মুখীন হতে পারে। আমরা এই কঠিন বৈশিষ্ট্যগুলির জন্য অ্যাডাপ্টিভ বিটরেট স্ট্রিমিং বা শক্তিশালী কম্প্রেশন প্রয়োগ করার পরামর্শ দিই। এটি রোমিং করার সময় অনেক অ্যাপের আচরণ পরিবর্তন করার পদ্ধতির অনুরূপ।
    3. আপনার অ্যাপটি নেটওয়ার্ক রিসোর্স ব্যবহারের পদ্ধতিটি সামঞ্জস্য করুন। সীমাবদ্ধ নেটওয়ার্কগুলি সবচেয়ে ভালো কাজ করে যখন অ্যাপগুলি বার্স্টে নেটওয়ার্ক অপারেশন করে এবং বেশিরভাগ সময় নেটওয়ার্ক ব্যবহার না করেই ব্যয় করে। পরিবর্তনশীল ল্যাটেন্সি রিয়েল-টাইম সিঙ্ক্রোনাস যোগাযোগকে চ্যালেঞ্জিং করে তুলতে পারে।

আপনার অ্যাপ যদি জটিল নেটওয়ার্কিং লজিক বা ফায়ারবেস ক্লাউড মেসেজিং ব্যবহার করে তবে আপনাকে কিছু নির্দিষ্ট পরিবর্তন করতে হবে।

সীমাবদ্ধ নেটওয়ার্কের জন্য অপ্টিমাইজ করা হিসাবে স্ব-শনাক্ত করুন

আপনার অ্যাপটিকে সীমাবদ্ধ নেটওয়ার্কের জন্য অপ্টিমাইজ করা হিসেবে শনাক্ত করতে এবং সেগুলি ব্যবহার করার জন্য, আপনার অ্যাপ ম্যানিফেস্ট ফাইলটি নিম্নরূপ একটি <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 বার্তা গ্রহণ করুন

যদি আপনার অ্যাপটি কোনও অ্যাপ সার্ভার থেকে বার্তা গ্রহণের জন্য 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 সার্ভার কেবল তখনই এটি সরবরাহ করে যখন ডিভাইসটি একটি অবাধ নেটওয়ার্কের মাধ্যমে সংযুক্ত থাকে।