인터넷 연결을 위한 Wi-Fi 추천 API

Android 10 (API 수준 29) 이상을 실행하는 기기에서는 앱이 네트워크를 추가할 수 있음 사용자 인증 정보를 사용하여 Wi-Fi 액세스 포인트에 자동 연결할 수 있습니다. kubectl 명령어 어떤 네트워크에 연결할지 추천 WifiNetworkSuggestion 플랫폼은 궁극적으로 앱 및 기타 요소로부터 입력을 받습니다.

Android 11 (API 수준 30) 이상:

  • PasspointConfiguration 프로비저닝 추천 API에서 지원됩니다. Android 11 이전에는 PasspointConfiguration 프로비저닝 addOrUpdatePasspointConfiguration()를 사용해야 합니다. API에 액세스할 수 있습니다.
  • 프레임워크는 TLS 기반 Enterprise에 보안 요구사항 적용 제안 (EAP-TLS, EAP-TTLS, EAP-PEAP)으로 지정됩니다. 이러한 네트워크에 대한 Root CA certificate를 설정해야 합니다. 및 server domain name.
를 통해 개인정보처리방침을 정의할 수 있습니다.
  • 프레임워크는 EAP-SIM 기반 Enterprise의 소유권 요구사항을 적용합니다. 추천 (EAP-SIM, EAP-AKA, EAP-AKA-PRIME)을 사용합니다. 이러한 추천은 이동통신사에서 서명한 앱에서만 허용됩니다.
  • 이동통신사 서명 앱에서 제공하는 추천의 경우 프레임워크는 자동으로 앱의 16진수에 해당하는 이동통신사 ID를 이동통신사 서명. 이러한 해당 SIM이 삭제되면 추천이 자동으로 사용 중지됩니다. 삭제됩니다.

Android 12 (API 수준 31) 이상:

  • 비지속적인 MAC 주소 무작위 지정을 통해 추가적인 개인 정보 보호를 활성화할 수 있으며, 주기적으로 무작위 MAC 주소를 다시 무작위 순서 지정합니다. setMacRandomizationSetting 사용 네트워크의 무작위 순서 지정 수준을 지정할 수 있습니다.

  • isPasspointTermsAndConditionsSupported(): 이용약관은 네트워크 배포에서 개방형 네트워크를 사용하는 안전하지 않은 종속 포털을 안전한 Passpoint 네트워크로 대체할 수 있는 Passpoint 기능입니다. 이용약관에 동의해야 하는 경우 사용자에게 알림이 표시됩니다. 이용약관으로 관리되는 Passpoint 네트워크를 제안하는 앱은 먼저 이 API를 호출하여 기기에서 이 기능을 지원하는지 확인해야 합니다. 기기에서 이 기능을 지원하지 않으면 이 네트워크에 연결할 수 없고 대체 네트워크나 기존 네트워크를 제안해야 합니다.

  • isDecoratedIdentitySupported(): 접두사 장식이 있는 네트워크에 인증할 때 장식된 ID 접두사를 사용하면 네트워크 운영자가 네트워크 액세스 식별자(NAI)를 업데이트하여 AAA 네트워크 내부의 여러 프록시를 통해 명시적 라우팅을 실행할 수 있습니다(자세한 내용은 RFC 7542 참고).

    Android 12는 이 기능을 구현하여 PPS-MO 확장을 위한 WBA 사양을 준수합니다. 장식된 ID가 필요한 Passpoint 네트워크를 제안하는 앱은 먼저 이 API를 호출하여 기기에서 이 기능을 지원하는지 확인해야 합니다. 기기에서 이 기능을 지원하지 않으면 ID가 장식되지 않고 네트워크 인증이 실패할 수 있습니다.

Passpoint 제안을 만들려면 앱에서 PasspointConfiguration, Credential, HomeSp 클래스를 사용해야 합니다. 이러한 클래스는 Wi-Fi Alliance Passpoint 사양에 정의된 Passpoint 프로필을 설명합니다.

다음 코드 샘플은 열린 하나, 하나에 대해 사용자 인증 정보를 제공하는 방법을 보여줍니다. WPA2, WPA3 네트워크 1개, Passpoint 네트워크 1개:

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);

자바

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);

사용자가 처음으로 제안을 한 직후에 사용자는 있습니다. 알림 유형은 실행 중인 Android 버전에 따라 다릅니다. 다음 단계를 따르세요.

  • Android 11 (API 수준 30) 이상에서는 앱이 앱이 포그라운드에서 실행 중인 경우 알림이 표시되며 있습니다.
  • Android 10 (API 수준 29)에서는 앱이 포그라운드에서 실행 중인지 백그라운드로 실행하든

플랫폼이 네트워크 추천 중 하나에 연결되면 설정이 표시됩니다. 해당 제안 앱에 대한 네트워크 연결을 표시하는 텍스트입니다.

사용자 연결 해제 처리

사용자가 Wi-Fi 선택도구를 사용하여 연결되어 있을 때 해당 네트워크는 아직 범위 내에 있습니다. 이 기간에는 앱이 네트워크 제안을 삭제했다가 다시 추가하더라도 자동 연결 시 사용 IP 주소를 반환할 수 있습니다. 사용자가 Wi-Fi 선택 도구를 사용하여 명시적으로 이전에 연결 해제된 네트워크에 연결되면 해당 네트워크는 즉시 자동 연결에 고려됩니다.

앱의 승인 상태 변경

사용자가 네트워크 제안 알림을 거부하면 앱에서 CHANGE_WIFI_STATE 권한을 요청해야 합니다. 사용자가 이 승인을 부여할 수 있습니다. Wi-Fi 제어 메뉴 (설정 > 앱 및 알림 > 특수 앱 액세스 > Wi-Fi 제어 > App name).