アプリごとのネットワーク選択(PANS)

OEM と車両所有者の両方から要求される増加するユースケースのリストを管理するために、車両は接続性への依存度が高まっており、その結果、データ フットプリントと関連コストが増加しています。アプリケーションごとのネットワーク選択 (PANS)機能を使用して、OEM が料金を支払ったネットワーク上で指定されたアプリのトラフィックをルーティングします。

PANS を使用すると、データ使用量とコストを管理しながら、同時に堅牢で安全なコネクテッド カー エクスペリエンスを提供できます。パン:

  • 車載デバイスのみで使用できるConnectivityManagerに追加された新しい API で構成されます。
  • 動的に変更される PANS ネットワーク機能のサポートを含めるために、更新された Wi-Fi 提案 API ( 「インターネット接続用の Wi-Fi 提案 API」を参照) を提供します。
  • サポートするメトリクスを収集します。
  • リファレンスアプリを提供します。

なぜパンなのか?

PANS では次のことができます。

  • アプリとネットワークのマッピングを動的に更新します。
  • アプリに変更を加えることなく、アプリレベルのルーティングを管理します。
  • OEM が許可したアプリのみが、マッピングされた OEM ネットワークにアクセスできます。
  • アプリ開発者は、この機能を実装するために変更を加える必要はありません。
  • ユーザー向けのメトリクスは、OEM 管理ネットワークのアプリからネットワークへのデータ使用量を追跡します。
  • ネットワーク アクセスは安全であり、意図しない使用例や無許可のアプリを通じて悪用されることはありません。
  • PANS アプリとネットワークのマッピングへの変更はユーザーに通知されます。
  • 同じネットワーク構成がすべてのユーザーに適用されます。

主な利点

PANS は、OEMS に次の主要な利点を提供します。

  1. OEM は、ユーザーの代わりにネットワーク トラフィックの料金を支払うことができます。
    • システムのアップデートはユーザーに無料で提供できます。
    • 指定したアプリのネットワーク使用量をユーザーに無料で提供できます。
    • ユーザーは、テレメトリやその他の分析を無料で管理できます。
  2. OEM は、ユーザー有料のデータ プランがなくても、重要なアプリが接続された状態を維持できるようにすることができます。たとえば、地図、アシスタント (ハンズフリー運転)、システム アップデートなどの安全性が重要な機能は、ユーザーがデータ プランを持っていない場合でも機能し続けます。
  3. PANS は、Android のネットワーク トラフィック ルーティングに固有の制御をさらに細分化します。たとえば、OEM は、アプリレベルのトラフィックのルーティングのための論理ネットワーク トポロジを最適に定義できます。

図1 。 PANSフレームワーク

PANSの実装

PANS を実装するために、新しいConnectivityManager API であるsetOemNetworkPreferenceが提供されています。この新しい API は、アプリをOemNetworkPreferenceにマップします。この API は自動車デバイスでのみ使用でき、新しいsignature権限を持つ@SystemApiとして注釈が付けられます。

図 2. PANS の実装

Oemネットワーク設定

OemNetworkPreference 、パッケージ名によるアプリをネットワーク設定にマッピングするOEM_PAIDおよびOEM_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 を実装するときは、次の点に留意してください。

  • ネットワーク設定は起動後は保持されないため、起動のたびに再適用する必要があります。
  • アプリの環境設定を作成するには、アプリをインストールする必要はありません。したがって、アンインストールされたアプリのネットワーク設定を事前に設定できます。
  • 常に、アプリは 1 つのネットワーク設定にのみマッピングできます。
  • ネットワーク設定は、アプリのデフォルトのネットワークを設定するために使用されます。これは、アプリが特殊な API のいずれかを介して使用するネットワークを指定していない場合に使用されるネットワークです。これにより、接続ニーズの大部分がカバーされるだけでなく、既存のアプリのユースケースを壊さないように、 NetworkRequest API などの特殊な API を継続的に使用できるようになります。たとえば、アプリが従量制のネットワーク上でのみ操作を実行したい場合、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 ポリシーを設定します。
  • デバイスのデフォルトポリシーを設定します。
  • ポリシーをクリアします。
  • 起動時にポリシーを適用します。
  • ドライバーの注意散漫 API を使用します ( 「ドライバーの注意散漫に関するガイドライン」を参照)。
  • OEM_PAIDおよびOEM_PRIVATEを使用して Wi-Fi を動的に更新します。

図 3.リファレンス アプリ

メトリクス

データ使用に関する透明性を促進するために、 OEM_PAIDおよびOEM_PRIVATEネットワーク マッピングを介して送信されるデータ量に関するメトリクスが収集され、利用可能になります。

トラブルシューティング

トラブルシューティングのほとんどの状況は、アプリが間違ったネットワークを使用している (ネットワーク接続がない) か、データの超過によって発生します。迅速な解決を有効にするには:

  • Connectivity dumpsysは、アクティブなアプリごとのデフォルト ネットワークとそれに関連するアプリ (PANS からマップされた) のリストが含まれています。
  • Netd dumpsysは、UID IP とファイアウォール ルールが含まれています。
  • Netstats dumpsysは、PANS のアプリごとのメトリクスが含まれています。たとえば、どのアプリがどの OEM ネットワークを使用したかなどです。

すべてのdumpsysデータは、Android バグレポートを作成することで入手できます。