OEM と車両所有者の両方から要求される増加するユースケースのリストを管理するために、車両は接続性への依存度が高まっており、その結果、データ フットプリントと関連コストが増加しています。アプリケーションごとのネットワーク選択 (PANS)機能を使用して、OEM が料金を支払ったネットワーク上で指定されたアプリのトラフィックをルーティングします。
PANS を使用すると、データ使用量とコストを管理しながら、同時に堅牢で安全なコネクテッド カー エクスペリエンスを提供できます。パン:
- 車載デバイスのみで使用できる
ConnectivityManager
に追加された新しい API で構成されます。 - 動的に変更される PANS ネットワーク機能のサポートを含めるために、更新された Wi-Fi 提案 API ( 「インターネット接続用の Wi-Fi 提案 API」を参照) を提供します。
- サポートするメトリクスを収集します。
- リファレンスアプリを提供します。
なぜパンなのか?
PANS では次のことができます。
- アプリとネットワークのマッピングを動的に更新します。
- アプリに変更を加えることなく、アプリレベルのルーティングを管理します。
- OEM が許可したアプリのみが、マッピングされた OEM ネットワークにアクセスできます。
- アプリ開発者は、この機能を実装するために変更を加える必要はありません。
- ユーザー向けのメトリクスは、OEM 管理ネットワークのアプリからネットワークへのデータ使用量を追跡します。
- ネットワーク アクセスは安全であり、意図しない使用例や無許可のアプリを通じて悪用されることはありません。
- PANS アプリとネットワークのマッピングへの変更はユーザーに通知されます。
- 同じネットワーク構成がすべてのユーザーに適用されます。
主な利点
PANS は、OEMS に次の主要な利点を提供します。
- OEM は、ユーザーの代わりにネットワーク トラフィックの料金を支払うことができます。
- システムのアップデートはユーザーに無料で提供できます。
- 指定したアプリのネットワーク使用量をユーザーに無料で提供できます。
- ユーザーは、テレメトリやその他の分析を無料で管理できます。
- OEM は、ユーザー有料のデータ プランがなくても、重要なアプリが接続された状態を維持できるようにすることができます。たとえば、地図、アシスタント (ハンズフリー運転)、システム アップデートなどの安全性が重要な機能は、ユーザーがデータ プランを持っていない場合でも機能し続けます。
- 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 を使用するには:
-
OemNetworkPreferences
を使用して、アプリをネットワーク設定にマップします。 -
OemNetworkPreferences
オブジェクトを使用してsetOemNetworkPreference
を呼び出します。 -
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)
とともに使用できます。これは実行時に変更できます。
次の例を考えてみましょう。
-
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>
- この
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 バグレポートを作成することで入手できます。