애플리케이션별 네트워크 선택(PANS)

OEM과 차량 소유자의 요청에 따라 늘어나는 사용 사례를 관리하기 위해 차량은 점점 더 연결성에 의존하고 있습니다. 따라서 데이터 공간과 관련 비용이 증가합니다. 애플리케이션별 네트워크 선택(PANS) 기능을 사용하여 OEM이 비용을 부담하는 네트워크에서 지정된 애플리케이션의 트래픽을 라우팅하세요.

PANS를 사용하면 데이터 사용량과 비용을 관리하면서 강력하고 안전하며 연결된 자동차 환경을 제공할 수 있습니다. PANS는 다음과 같습니다.

  • 자동차 기기에서만 사용할 수 있는 ConnectivityManager에 추가된 새 API로 구성됩니다.
  • 동적으로 변경되는 PANS 네트워크 기능 지원이 포함되도록 업데이트된 Wi-Fi 추천 API(인터넷 연결을 위한 Wi-Fi 추천 API 참고)를 제공합니다.
  • 지원 측정항목을 수집합니다.
  • 참조 애플리케이션을 제공합니다.

PANS를 사용해야 하는 이유

PANS는 다음과 같은 기능을 제공합니다.

  • 애플리케이션과 네트워크 간의 매핑을 동적으로 업데이트합니다.
  • 앱을 변경하지 않고 애플리케이션 수준 라우팅을 관리합니다.
  • OEM 허용 애플리케이션만 매핑된 OEM 네트워크에 액세스할 수 있습니다.
  • 애플리케이션 개발자는 이 기능을 구현하려고 어떠한 변경 작업도 할 필요가 없습니다.
  • 사용자 대상 측정항목은 OEM 관리 네트워크의 애플리케이션과 네트워크 간 데이터 사용량을 추적합니다.
  • 네트워크 액세스는 안전하며 의도하지 않은 사용 사례나 승인되지 않은 애플리케이션을 통해 악용될 수 없습니다.
  • PANS 애플리케이션과 네트워크 간 매핑 변경사항이 사용자에게 전달됩니다.
  • 같은 네트워크 구성이 모든 사용자에게 적용됩니다.

핵심 이점

PANS를 통해 OEM은 다음과 같은 핵심 이점을 활용할 수 있습니다.

  1. OEM은 사용자 대신 네트워크 트래픽 비용을 부담할 수 있습니다.
    • 시스템 업데이트가 무료로 사용자에게 제공될 수 있습니다.
    • 지정된 앱의 네트워크 사용량이 무료로 사용자에게 제공될 수 있습니다.
    • 원격 분석과 기타 분석이 사용자의 비용 부담 없이 관리될 수 있습니다.
  2. OEM은 사용자 지불 데이터 요금제 없이도 중요한 애플리케이션이 계속 연결되도록 할 수 있습니다. 예를 들어 지도, 어시스턴트(핸즈프리 운전), 시스템 업데이트와 같은 안전에 중요한 기능은 사용자가 데이터 요금제를 사용하지 않는 경우에도 계속 작동합니다.
  3. PANS는 Android의 네트워크 트래픽 라우팅과 관련된 세부적인 제어 기능을 추가로 제공합니다. 예를 들어 OEM은 애플리케이션 수준 트래픽 라우팅을 위한 논리적 네트워크 토폴로지를 최적으로 정의할 수 있습니다.

그림 1. PANS 프레임워크

PANS 구현

PANS를 구현하기 위해 새 ConnectivityManager API인 setOemNetworkPreference가 제공됩니다. 이 새 API는 애플리케이션을 OemNetworkPreference에 매핑합니다. 이 API는 자동차 기기에서만 사용할 수 있으며 새 signature 권한이 있는 @SystemApi로 주석 처리됩니다.

그림 2. PANS 구현

OemNetworkPreference

OemNetworkPreference는 패키지 이름을 기준으로 앱을 네트워크 환경설정에 매핑하는 OEM_PAIDOEM_PRIVATE NetworkCapabilities의 추상화입니다. 네트워크 환경설정에서는 네트워크 계층 구조를 허용합니다. 예를 들어, 앱을 OEM_NETWORK_PREFERENCE_OEM_PAID 환경설정에 매핑하면 다음과 같은 기본 네트워크 우선순위가 앱에 할당됩니다. 즉, UNMETERED를 먼저 사용하고 UNMETERED를 사용할 수 없으면 OEM_PAID 네트워크를 사용합니다. OEM_PAID를 사용할 수 없으면 시스템 기본 네트워크를 사용합니다.

  • OEM_PAID: OEM 네트워크와 OEM 이외의 네트워크에서 모두 라우팅될 수 있는 앱에 주로 사용됩니다.
  • OEM_PRIVATE: OEM 앱이 전용 네트워크 액세스 권한을 얻는 데 주로 사용됩니다.
/**
* If an unmetered network is available, use it.
* Otherwise, if a network with the OEM_PAID capability is available, use it.
* Otherwise, use the general default network.
*/
public static final int OEM_NETWORK_PREFERENCE_OEM_PAID = 1;

/**
* If an unmetered network is available, use it.
* Otherwise, if a network with the OEM_PAID capability is available, use it.
* Otherwise, the app doesn't get a default network.
*/
public static final int OEM_NETWORK_PREFERENCE_OEM_PAID_NO_FALLBACK = 2;

/**
* Use only NET_CAPABILITY_OEM_PAID networks.
*/
public static final int OEM_NETWORK_PREFERENCE_OEM_PAID_ONLY = 3;

/**
* Use only NET_CAPABILITY_OEM_PRIVATE networks.
*/
public static final int OEM_NETWORK_PREFERENCE_OEM_PRIVATE_ONLY = 4;

PANS API 호출

PANS API를 사용하려면 다음 안내를 따르세요.

  1. OemNetworkPreferences를 사용하여 앱을 네트워크 환경설정에 매핑합니다.
  2. OemNetworkPreferences 객체를 사용하여 setOemNetworkPreference를 호출합니다.
  3. Runnable 인터페이스를 사용하여 API 완료를 수신 대기합니다.

예를 들면 다음과 같습니다.

// Mapping three packages to two network preferences
// Packages have a 1:1 mapping to network preferences
OemNetworkPreferences pref = new OemNetworkPreferences.Builder()
   .addNetworkPreference("first.package.name", OEM_NETWORK_PREFERENCE_OEM_PAID)
   .addNetworkPreference("second.package.name", OEM_NETWORK_PREFERENCE_OEM_PAID)
   .addNetworkPreference("third.package.name", OEM_NETWORK_PREFERENCE_OEM_PRIVATE_ONLY)
   .build();

myConnectivityManager.setOemNetworkPreference(pref, myExecutor, myListener);

고려사항

PANS를 구현할 때는 다음 사항에 유의하세요.

  • 네트워크 환경설정은 부팅할 때 유지되지 않으며 부팅할 때마다 다시 적용해야 합니다.
  • 애플리케이션의 환경설정을 만들려고 설치할 필요는 없습니다. 따라서 제거된 앱의 네트워크 환경설정을 사전에 설정할 수 있습니다.
  • 앱은 언제나 단일 네트워크 환경설정에만 매핑될 수 있습니다.
  • 네트워크 환경설정을 사용하여 애플리케이션의 기본 네트워크를 설정합니다. 기본 네트워크는 애플리케이션이 사용하려는 네트워크를 특수 API 중 하나를 통해 지정하지 않았을 때 사용되는 네트워크입니다. 이렇게 하면 대부분의 연결 요구사항이 해결될 뿐 아니라 NetworkRequest API와 같은 특수 API를 계속 사용하여 기존의 앱 사용 사례가 중단되지 않도록 할 수 있습니다. 예를 들어, 앱이 무제한(UNMETERED) 네트워크에서만 작업을 실행하려는 경우 PANS는 다른 네트워크를 사용하도록 강제하지 않습니다.

네트워크 구성

OEM_PAID 또는 OEM_PRIVATE 기능이 있는 네트워크는 상응하는 네트워크 환경설정을 사용할 때 사용 가능해야 합니다. Android는 이더넷 및 Wi-Fi 네트워크 기능 구성을 지원합니다. 이더넷 네트워크의 경우 리소스 오버레이 config_ethernet_interfaces를 사용할 수 있습니다. 이는 컴파일 시간에 설정됩니다.

Wi-Fi의 경우 WifiNetworkSuggestion API는 새 Android 12 API인 setOemPaid(Boolean)setOemPrivate(Boolean)과 함께 사용할 수 있습니다. 이는 런타임에 변경할 수 있습니다.

다음 예를 살펴보세요.

  1. 이름이 config_ethernet_interfaces인 리소스 오버레이는 다음을 지정합니다.
    • 구성할 인터페이스 이름
    • 원하는 NetworkCapabilities
      <!-- 11 NET_CAPABILITY_NOT_METERED
           12 NET_CAPABILITY_INTERNET
           14 NET_CAPABILITY_TRUSTED
           15 NET_CAPABILITY_NOT_VPN
           22 NET_CAPABILITY_OEM_PAID || 26 NET_CAPABILITY_OEM_PRIVATE -->
      <string-array translatable="false" name="config_ethernet_interfaces">
         <item>eth0;11,12,14,15,22;;</item></string-array>
  2. WiFiNetworkSuggestion은 동적으로 변경할 수 있습니다.
    ArrayList<WifiNetworkSuggestion> list = new ArrayList<>();
    list.add(new WifiNetworkSuggestion.Builder()
                   .setSsid(WifiInfo.sanitizeSsid(ssid))
                   .setOemPrivate(true)
                   .build());
    mWifiManager.addNetworkSuggestions(list);

PANS 네트워크 액세스 제한

OEM_PAID 또는 OEM_PRIVATE 기능으로 네트워크에 태그를 지정하면 네트워크가 제한된 네트워크로 표시됩니다. 제한된 네트워크는 OEM이 제어하는 CONNECTIVITY_USE_RESTRICTED_NETWORKS 권한이 있는 앱에서 사용할 수 있습니다.

이 권한이 있는 앱은 앱에서 명시적으로 요청하는 경우 제한된 네트워크를 사용할 수 있습니다. 그러나 이러한 앱은 제한된 네트워크를 기본값으로 사용하지 않습니다. PANS를 통해 매핑된 앱은 제한된 OEM 네트워크를 기본값으로 설정할 수 있으며 이를 사용하기 위해 제한된 네트워크 권한이 필요하지 않습니다. 이러한 앱에 PANS를 통해 기본 네트워크로 할당된 제한된 OEM 네트워크가 있으면 앱에서 원하는 경우 앞서 언급한 OEM 네트워크를 명시적으로 요청할 수도 있습니다.

참조 앱 검토

NetworkPreferenceApp이라는 참조 앱(코드 포함)이 사용자 디버그 자동차 빌드에 제공되고 다음을 실행하는 방법을 보여줍니다.

  • PANS 측정항목 사용
  • PANS 정책 설정
  • 기기의 기본 정책 설정
  • 정책 삭제
  • 부팅 시 정책 적용
  • Driver Distraction API 사용(운전자 주의 분산 행동 가이드라인 참고)
  • OEM_PAIDOEM_PRIVATE으로 Wi-Fi 동적 업데이트

그림 3. 참조 앱

측정항목

데이터 사용량의 투명성을 높이기 위해 OEM_PAIDOEM_PRIVATE 네트워크 매핑을 통해 전송되는 데이터의 양에 관한 측정항목이 수집되고 제공됩니다.

문제 해결

대부분의 문제 해결 상황은 잘못된 네트워크(네트워크 연결 없음)를 사용하는 애플리케이션이나 데이터 초과로 인해 발생합니다. 빠르게 문제를 해결하려면 다음 안내를 따르세요.

  • 연결 dumpsys에는 앱별 활성 기본 네트워크 및 연결된 애플리케이션(PANS에서 매핑됨) 목록이 포함됩니다.
  • Netd dumpsys에는 UID IP 및 방화벽 규칙이 포함됩니다.
  • Netstats dumpsys에는 애플리케이션별 PANS 측정항목이 포함됩니다. 예를 들어 어떤 애플리케이션에서 어떤 OEM 네트워크를 사용했는지 알 수 있습니다.

모든 dumpsys 데이터는 Android 버그 신고를 만들어 사용할 수 있습니다.