Jaringan satelit suatu saat akan cukup andal untuk berfungsi sebagai jaringan normal dan bekerja dengan lancar untuk semua kasus penggunaan aplikasi; tetapi untuk saat ini, data di jaringan ini adalah resource yang langka. Jaringan berbasis satelit dengan batasan penggunaan data disebut jaringan satelit terbatas.
Karena batasan ini, aplikasi Android tidak menggunakan jaringan ini secara default. Jika Anda ingin aplikasi beroperasi di jaringan satelit yang terbatas, Anda harus mengidentifikasi aplikasi Anda sebagai aplikasi yang dioptimalkan untuk penggunaan data satelit dan menyesuaikan kasus penggunaan aplikasi Anda untuk menghemat resource saat terhubung ke jaringan satelit yang terbatas.
Menyesuaikan kasus penggunaan aplikasi Anda
Yang harus Anda lakukan untuk mengizinkan aplikasi Anda mengakses jaringan satelit yang terbatas adalah memilih ikut serta, tetapi Anda mungkin perlu melakukan perubahan lebih lanjut untuk mengoptimalkan perilaku aplikasi Anda agar menggunakan resource jaringan yang terbatas secara bertanggung jawab. Berikut beberapa hal yang perlu dipertimbangkan saat Anda mengoptimalkan penggunaan data yang terbatas:
- Tentukan apakah aplikasi Anda cocok untuk digunakan di jaringan yang terbatas. Beberapa aplikasi tidak cocok untuk jaringan dengan batasan data dalam keadaan apa pun. Misalnya, aplikasi streaming video mungkin memilih untuk tidak menggunakan jaringan satelit sama sekali, meskipun aplikasi tersebut masih dapat mengidentifikasi keberadaan jaringan satelit dan memberi tahu pengguna bahwa aplikasi tidak akan berfungsi di jaringan terbatas yang ada.
- Identifikasi kasus penggunaan tertentu yang akan dibatasi atau diubah. Beberapa fitur aplikasi Anda mungkin lebih cocok untuk kondisi data terbatas daripada yang lain. Misalnya, mengirim pesan teks akan berfungsi dengan baik, tetapi mencoba mengupload video HD kemungkinan akan menghasilkan pengalaman pengguna yang buruk. Hal ini mirip dengan cara banyak aplikasi mengubah perilaku saat roaming.
- Sesuaikan cara aplikasi Anda menggunakan resource jaringan. Jaringan yang dibatasi berfungsi paling baik saat aplikasi melakukan operasi jaringan secara beruntun dan menghabiskan sebagian besar waktu tanpa menggunakan jaringan. Hindari pembuatan traffic jaringan yang konstan atau berlebihan. Misalnya, audio tekan untuk bicara lebih cocok untuk kondisi jaringan yang terbatas daripada panggilan audio real-time.
Ada juga perubahan khusus yang perlu Anda lakukan jika aplikasi Anda menggunakan logika jaringan yang kompleks atau Firebase Cloud Messaging.
Mengidentifikasi diri sendiri sebagai dioptimalkan untuk jaringan terbatas
Untuk mengidentifikasi aplikasi Anda sebagai aplikasi yang dioptimalkan untuk jaringan terbatas dan memilih untuk menggunakannya, perbarui file manifes aplikasi dengan elemen
<meta-data>
sebagai berikut:
<meta-data android:name="android.telephony.PROPERTY_SATELLITE_DATA_OPTIMIZED"
android:value="PACKAGE_NAME" />
Elemen ini memungkinkan aplikasi Anda menggunakan jaringan satelit yang dibatasi saat jaringan tersebut adalah satu-satunya jaringan yang tersedia. Selain itu, aplikasi ini memberi tahu sistem bahwa aplikasi Anda dioptimalkan untuk jaringan terbatas, sehingga membantu penemuan pengguna dengan mencantumkannya di antara aplikasi yang kompatibel dengan satelit di aplikasi setelan.
Mengubah perilaku dalam kondisi data yang dibatasi
Jika Anda perlu mengubah perilaku aplikasi saat menggunakan jaringan yang dibatasi, atau
jika aplikasi Anda memiliki logika yang sudah ada sebelumnya yang menggunakan
ConnectivityManager
untuk mengelola penggunaan jaringan, Anda harus
melakukan beberapa perubahan pada alur jaringan.
Mendeteksi kondisi data yang dibatasi
Objek NetworkCapabilities
yang digunakan untuk permintaan
jaringan mencakup bit
NET_CAPABILITY_NOT_BANDWIDTH_CONSTRAINED
yang
ditetapkan secara default di semua jaringan dan dihapus di jaringan yang
terkendala bandwidth. Anda dapat menentukan apakah jaringan memiliki batasan bandwidth dengan memeriksa apakah jaringan tersebut memiliki kemampuan NET_CAPABILITY_NOT_BANDWIDTH_CONSTRAINED
atau tidak.
Bekerja dengan jaringan yang dibatasi
Objek NetworkRequest
juga menyertakan
kemampuan NET_CAPABILITY_NOT_BANDWIDTH_CONSTRAINED
secara default. Hapus kemampuan ini untuk menunjukkan bahwa jaringan terbatas dapat diterima.
Saat mendeteksi bahwa Anda telah terhubung ke jaringan yang dibatasi, Anda dapat menyesuaikan fitur aplikasi sesuai kebutuhan:
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);
Menerima pesan FCM di jaringan yang dibatasi
Jika aplikasi Anda menggunakan Firebase Cloud Messaging (FCM) untuk menerima pesan
dari server aplikasi, Anda dapat menunjukkan bahwa pesan tertentu harus dikirimkan
bahkan di jaringan yang terbatas dengan menyertakan tanda bandwidth_constrained_ok
saat meneruskan pesan ke server FCM:
{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification":{
"title":"Portugal vs. Denmark",
"body":"great match!"
}
"android": {
"bandwidth_constrained_ok": true
}
}
}
Jika pesan tidak menyertakan tanda ini, server FCM hanya akan mengirimkannya saat perangkat terhubung melalui jaringan yang tidak dibatasi.