Perangkat yang menjalankan Android 10 (API level 29) dan yang lebih baru memungkinkan aplikasi Anda menambahkan jaringan
kredensial untuk perangkat guna
terhubung secara otomatis ke titik akses Wi-Fi. Anda dapat menyediakan
saran untuk terhubung ke jaringan mana
WifiNetworkSuggestion
Pada akhirnya platform memilih titik akses
mana yang akan diterima berdasarkan
input dari aplikasi Anda dan lainnya.
Di Android 11 (level API 30) dan yang lebih tinggi:
- Menyediakan
PasspointConfiguration
didukung oleh API saran. Sebelum Android 11, menyediakanPasspointConfiguration
mewajibkan penggunaanaddOrUpdatePasspointConfiguration()
Compute Engine API. - Framework ini menerapkan persyaratan keamanan pada Enterprise berbasis TLS
saran (EAP-TLS, EAP-TTLS, dan EAP-PEAP); saran untuk jaringan tersebut
harus menyetel
Root CA certificate
danserver domain name
.
- Framework ini menerapkan persyaratan kepemilikan untuk Enterprise berbasis EAP-SIM saran (EAP-SIM, EAP-AKA, EAP-AKA-PRIME); saran tersebut adalah hanya diizinkan oleh aplikasi yang ditandatangani oleh operator.
- Untuk saran yang diberikan oleh aplikasi yang ditandatangani operator, framework secara otomatis akan menetapkan ID operator yang sesuai dengan penandatanganan ekspedisi. Seperti saran otomatis dinonaktifkan jika SIM yang sesuai dihapus dari perangkat.
Di Android 12 (level API 31) dan yang lebih tinggi:
Privasi tambahan dapat diaktifkan melalui pengacakan MAC yang tidak persisten, yang secara berkala mengacak ulang alamat MAC yang diacak. Gunakan
setMacRandomizationSetting
untuk menentukan tingkat acak 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 project dan satu yang terbuka WPA2, satu jaringan 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 langsung diberi tahu. Jenis notifikasi bergantung pada versi Android yang berjalan pada perangkat:
- Di Android 11 (level API 30) dan yang lebih baru, pengguna melihat dialog jika aplikasi yang berjalan di latar depan, dan notifikasi jika aplikasi berjalan di latar belakang.
- Di Android 10 (API level 29), pengguna melihat notifikasi, terlepas dari apakah aplikasi berjalan di latar depan atau latar belakang.
Saat platform terhubung ke salah satu saran jaringan, setelan akan muncul teks yang menghubungkan koneksi jaringan ke aplikasi pemberi saran yang sesuai.
Menangani pengguna yang terputus koneksi
Jika pengguna menggunakan pemilih Wi-Fi untuk memutuskan sambungan 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 sesuai dengan jaringan. Jika pengguna menggunakan pemilih Wi-Fi untuk terhubung ke jaringan yang sebelumnya terputus, maka jaringan itu akan 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 (Settings >
Aplikasi & notifikasi > Aplikasi Khusus
akses > Kontrol Wi-Fi > App name).