Wi-Fi suggestion API untuk konektivitas internet

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:

  • 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).