Perangkat yang menjalankan Android 10 (API level 29) dan yang lebih tinggi memungkinkan aplikasi Anda menambahkan kredensial jaringan agar perangkat terhubung secara otomatis ke titik akses Wi-Fi. Anda dapat memberikan
saran jaringan mana yang akan dihubungkan menggunakan
WifiNetworkSuggestion
.
Platform tersebut akhirnya memilih jalur akses mana yang akan diterima berdasarkan
input dari aplikasi Anda dan orang lain.
Di Android 11 (API level 30) dan yang lebih tinggi:
- Penyediaan
PasspointConfiguration
didukung oleh API saran. Sebelum Android 11, penyediaanPasspointConfiguration
memerlukan penggunaanaddOrUpdatePasspointConfiguration()
API. - Framework ini menerapkan persyaratan keamanan pada saran Enterprise berbasis TLS (EAP-TLS, EAP-TTLS, dan EAP-PEAP); saran untuk jaringan tersebut harus menetapkan
Root CA certificate
danserver domain name
.
- Framework ini menerapkan persyaratan kepemilikan untuk saran Enterprise berbasis EAP-SIM (EAP-SIM, EAP-AKA, EAP-AKA-PRIME); saran tersebut hanya diizinkan oleh aplikasi yang ditandatangani operator.
- Untuk saran yang diberikan oleh aplikasi yang ditandatangani operator, framework akan otomatis menetapkan ID operator yang sesuai dengan penandatanganan operator aplikasi. Saran tersebut akan otomatis dinonaktifkan jika SIM yang sesuai dihapus dari perangkat.
Di Android 12 (API level 31) dan yang lebih tinggi:
Privasi tambahan dapat diaktifkan melalui pengacakan MAC non-persisten, yang secara berkala mengacaukan ulang alamat MAC acak. Gunakan
setMacRandomizationSetting
untuk menentukan tingkat pengacakan untuk jaringan Anda.isPasspointTermsAndConditionsSupported()
.Persyaratan dan ketentuan merupakan fitur Passpoint yang memungkinkan deployment jaringan untuk menggantikan captive portal yang tidak aman, yang menggunakan jaringan terbuka, dengan jaringan Passpoint yang aman. Notifikasi ditampilkan kepada pengguna ketika persyaratan dan ketentuan harus disetujui. Aplikasi yang menyarankan jaringan Passpoint yang dilindungi oleh persyaratan dan ketentuan harus memanggil API ini terlebih dahulu untuk memastikan bahwa perangkat mendukung kemampuan tersebut. Jika perangkat tidak mendukung kemampuan tersebut, perangkat tidak akan dapat terhubung ke jaringan ini, dan jaringan alternatif atau lama harus disarankan.isDecoratedIdentitySupported()
: Saat mengautentikasi ke jaringan dengan dekorasi awalan, awalan identitas yang didekorasi memungkinkan operator jaringan memperbarui Network Access Identifier (NAI) untuk melakukan perutean eksplisit melalui beberapa proxy di dalam jaringan AAA (lihat RFC 7542 untuk informasi selengkapnya).Android 12 menerapkan fitur ini agar sesuai dengan spesifikasi WBA untuk ekstensi PPS-MO. Aplikasi yang menyarankan jaringan Passpoint yang memerlukan identitas yang didekorasi harus memanggil API ini terlebih dahulu untuk memastikan bahwa perangkat mendukung kemampuan tersebut. Jika perangkat tidak mendukung kemampuan tersebut, identitas tidak akan didekorasi dan autentikasi ke jaringan mungkin akan gagal.
Untuk membuat saran Passpoint, aplikasi harus menggunakan class
PasspointConfiguration
,
Credential
, dan
HomeSp
. Class
ini menjelaskan profil Passpoint, yang ditentukan dalam spesifikasi Passpoint
Aliansi
Wi-Fi.
Contoh kode berikut menunjukkan cara memberikan kredensial untuk satu jaringan terbuka, satu WPA2, satu WPA3, dan satu jaringan Passpoint:
Kotlin
val suggestion1 = WifiNetworkSuggestion.Builder() .setSsid("test111111") .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); val suggestion2 = WifiNetworkSuggestion.Builder() .setSsid("test222222") .setWpa2Passphrase("test123456") .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); val suggestion3 = WifiNetworkSuggestion.Builder() .setSsid("test333333") .setWpa3Passphrase("test6789") .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); val passpointConfig = PasspointConfiguration(); // configure passpointConfig to include a valid Passpoint configuration val suggestion4 = WifiNetworkSuggestion.Builder() .setPasspointConfig(passpointConfig) .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); val suggestionsList = listOf(suggestion1, suggestion2, suggestion3, suggestion4); val wifiManager = context.getSystemService(Context.WIFI_SERVICE) as WifiManager; val status = wifiManager.addNetworkSuggestions(suggestionsList); if (status != WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS) { // do error handling here } // Optional (Wait for post connection broadcast to one of your suggestions) val intentFilter = IntentFilter(WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION); val broadcastReceiver = object : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { if (!intent.action.equals(WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION)) { return; } // do post connect processing here } }; context.registerReceiver(broadcastReceiver, intentFilter);
Java
final WifiNetworkSuggestion suggestion1 = new WifiNetworkSuggestion.Builder() .setSsid("test111111") .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); final WifiNetworkSuggestion suggestion2 = new WifiNetworkSuggestion.Builder() .setSsid("test222222") .setWpa2Passphrase("test123456") .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); final WifiNetworkSuggestion suggestion3 = new WifiNetworkSuggestion.Builder() .setSsid("test333333") .setWpa3Passphrase("test6789") .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); final PasspointConfiguration passpointConfig = new PasspointConfiguration(); // configure passpointConfig to include a valid Passpoint configuration final WifiNetworkSuggestion suggestion4 = new WifiNetworkSuggestion.Builder() .setPasspointConfig(passpointConfig) .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); final List<WifiNetworkSuggestion> suggestionsList = new ArrayList<WifiNetworkSuggestion> {{ add(suggestion1); add(suggestion2); add(suggestion3); add(suggestion4); }}; final WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); final int status = wifiManager.addNetworkSuggestions(suggestionsList); if (status != WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS) { // do error handling here… } // Optional (Wait for post connection broadcast to one of your suggestions) final IntentFilter intentFilter = new IntentFilter(WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION); final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (!intent.getAction().equals( WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION)) { return; } // do post connect processing here... } }; context.registerReceiver(broadcastReceiver, intentFilter);
Segera setelah aplikasi menempatkan saran untuk pertama kalinya, pengguna akan diberi tahu. Jenis notifikasi bergantung pada versi Android yang berjalan di perangkat:
- Di Android 11 (API level 30) dan yang lebih baru, pengguna akan melihat dialog jika aplikasi berjalan di latar depan, dan notifikasi jika aplikasi berjalan di latar belakang.
- Di Android 10 (API level 29), pengguna akan melihat notifikasi, terlepas dari apakah aplikasi berjalan di latar depan atau latar belakang.
Saat platform terhubung ke salah satu saran jaringan, setelan akan menampilkan teks yang mengatribusikan koneksi jaringan ke aplikasi pemberi saran yang sesuai.
Menangani pengguna yang terputus koneksi
Jika pengguna menggunakan pemilih Wi-Fi untuk memutuskan koneksi secara eksplisit dari salah satu saran jaringan saat terhubung, jaringan tersebut akan diabaikan saat masih dalam jangkauan. Selama periode ini, jaringan tersebut tidak akan dipertimbangkan untuk koneksi otomatis, meskipun aplikasi menghapus dan menambahkan kembali saran jaringan yang sesuai dengan jaringan. Jika pengguna menggunakan pemilih Wi-Fi untuk menghubungkan secara eksplisit ke jaringan yang sebelumnya terputus, jaringan tersebut akan segera dipertimbangkan untuk koneksi otomatis.
Mengubah status persetujuan untuk aplikasi
Pengguna yang menolak notifikasi saran jaringan akan menghapus
izin CHANGE_WIFI_STATE
dari aplikasi. Pengguna dapat memberikan persetujuan ini
nanti dengan membuka menu kontrol Wi-Fi (Setelan >
Aplikasi & notifikasi > Akses
Aplikasi Khusus > Kontrol Wi-Fi > App name).