Netzwerkauswahl pro Anwendung (PANS)

Fahrzeuge sind zunehmend auf Konnektivität angewiesen, um die wachsende Liste von Anwendungsfällen zu verwalten, die sowohl von OEMs als auch von Fahrzeughaltern angefordert werden. Dies führt zu einem erhöhten Datenvolumen und zugehörigen Kosten. Verwenden Sie die Funktion Netzwerkauswahl pro Anwendung (Per-Application Network Selection, PANS), um den Traffic bestimmter Apps über Netzwerke weiterzuleiten, die vom OEM bezahlt werden.

Mit PANS können Sie das Volumen und die Kosten der Datennutzung verwalten und gleichzeitig eine robuste, sichere und vernetzte Nutzung Ihres Autos ermöglichen. PANS:

  • Besteht aus einer neuen API, die ConnectivityManager hinzugefügt wurde und nur für Geräte aus der Automobilbranche verfügbar ist.
  • Bietet eine aktualisierte WLAN-Vorschlags-API (siehe WLAN-Vorschlags-API für die Internetverbindung), die die Unterstützung für dynamisch wechselnde PANS-Netzwerkfunktionen umfasst.
  • Es werden unterstützende Messwerte erfasst.
  • Eine Referenz-App bereitstellen.

Warum PANS?

PANs können:

  • App-zu-Netzwerk-Zuordnungen dynamisch aktualisieren
  • Routing auf App-Ebene verwalten, ohne Änderungen an Apps vorzunehmen
  • Nur vom OEM zugelassene Apps können auf die zugeordneten OEM-Netzwerke zugreifen.
  • App-Entwickler müssen keine Änderungen vornehmen, um diese Funktion zu implementieren.
  • Nutzerorientierte Messwerte erfassen die Datennutzung zwischen App und Netzwerk für von OEMs verwaltete Netzwerke.
  • Der Netzwerkzugriff ist sicher und kann nicht durch unbeabsichtigte Anwendungsfälle oder nicht autorisierte Apps missbraucht werden.
  • Änderungen an PANS-App-zu-Netzwerk-Zuordnungen werden den Nutzern mitgeteilt.
  • Die gleiche Netzwerkkonfiguration wird auf alle Nutzer angewendet.

Hauptvorteile

PANS bietet OEMs folgende Hauptvorteile:

  1. OEMs können anstelle von Nutzern für Netzwerkverkehr bezahlen:
    • Systemupdates können für den Nutzer kostenlos zur Verfügung gestellt werden.
    • Die Netzwerknutzung bestimmter Apps kann für den Nutzer kostenlos sein.
    • Telemetrie und andere Analysen können kostenlos verwaltet werden.
  2. OEMs können dafür sorgen, dass kritische Apps auch ohne vom Nutzer bezahltes Datenvolumen verbunden bleiben. So funktionieren beispielsweise sicherheitskritische Funktionen wie Karten, Assistant (Freisprechfunktion fürs Auto) und Systemupdates auch dann, wenn ein Nutzer kein Datentarif hat.
  3. PANS bietet eine detailliertere Steuerung speziell für das Routing von Netzwerkverkehr in Android. So können OEMs beispielsweise eine logische Netzwerktopologie für das Routing von Traffic auf App-Ebene optimal definieren.

Abbildung 1 PANS-Framework

PANS implementieren

Zur Implementierung von PANS wird eine neue ConnectivityManager API, setOemNetworkPreference, bereitgestellt. Mit dieser neuen API werden Apps einem OemNetworkPreference zugeordnet. Diese API ist nur für Geräte aus der Automobilbranche verfügbar und wird als @SystemApi mit einer neuen signature-Berechtigung gekennzeichnet.

Abbildung 2: PANS implementieren

OemNetworkPreference

OemNetworkPreference ist eine Abstraktion von OEM_PAID und OEM_PRIVATE. NetworkCapabilities ordnet Apps anhand des Paketnamens einer Netzwerkeinstellung zu. Netzwerkeinstellungen ermöglichen Netzwerkhierarchien. Wenn Sie beispielsweise eine App der Einstellung OEM_NETWORK_PREFERENCE_OEM_PAID zuordnen, wird der App die folgende Priorität der Standardnetzwerke zugewiesen: zuerst ein UNMETERED-Netzwerk, falls UNMETERED nicht verfügbar ist, ein OEM_PAID-Netzwerk und falls OEM_PAID nicht verfügbar ist, das Standardnetzwerk des Systems.

  • OEM_PAID Wird hauptsächlich für Apps verwendet, die sowohl über OEM- als auch über Nicht-OEM-Netzwerke weitergeleitet werden können.
  • OEM_PRIVATE Wird hauptsächlich für OEM-Apps verwendet, um auf ein speziell für sie vorgesehenes Netzwerk zuzugreifen.
/**
* 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 APIs aufrufen

So verwenden Sie PANS-APIs:

  1. Verwenden Sie OemNetworkPreferences, um einer App eine Netzwerkeinstellung zuzuordnen.
  2. Rufen Sie setOemNetworkPreference mit dem OemNetworkPreferences-Objekt auf.
  3. Verwende die Runnable-Schnittstelle, um auf den API-Abschluss zu warten.

Beispiel:

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

Wissenswertes

Beachten Sie bei der Implementierung von PANS Folgendes:

  • Netzwerkeinstellungen werden nicht bei jedem Start beibehalten und müssen bei jedem Start neu angewendet werden.
  • Sie müssen die App nicht installiert haben, um eine Einstellung dafür zu erstellen. Daher können Netzwerkeinstellungen für deinstallierte Apps proaktiv festgelegt werden.
  • Eine App kann jeweils nur einer Netzwerkeinstellung zugeordnet werden.
  • Mit den Netzwerkeinstellungen wird das Standardnetzwerk einer App festgelegt. Dieses Netzwerk wird verwendet, wenn eine App nicht über eine der speziellen APIs angegeben hat, welche Netzwerke verwendet werden sollen. Damit werden nicht nur die meisten Verbindungsanforderungen abgedeckt, sondern auch die weitere Nutzung spezieller APIs wie der NetworkRequest API ermöglicht, damit bestehende App-Anwendungsfälle nicht beeinträchtigt werden. Wenn eine App beispielsweise nur einen Vorgang über ein unbegrenztes Netzwerk ausführen möchte, zwingt PANS sie nicht, ein anderes Netzwerk zu verwenden.

Netzwerk konfigurieren

Wenn eine entsprechende Netzwerkeinstellung verwendet wird, muss ein Netzwerk mit den Funktionen OEM_PAID oder OEM_PRIVATE verfügbar sein. Android unterstützt die Konfiguration von Funktionen für Ethernet- und WLANs. Für Ethernet-Netzwerke können Sie ein Ressourcen-Overlay, config_ethernet_interfaces, verwenden. Dieser Wert wird zur Kompilierungszeit festgelegt.

Für WLAN kann die WifiNetworkSuggestion API mit den neuen Android 12 APIs setOemPaid(Boolean) und setOemPrivate(Boolean) verwendet werden. Dieser Wert kann zur Laufzeit geändert werden.

Betrachten Sie diese Beispiele:

  1. Ein Ressourcen-Overlay mit dem Namen config_ethernet_interfaces gibt Folgendes an:
    • Der Name der zu konfigurierenden Schnittstelle.
    • Die gewünschten NetworkCapabilities-Werte.
      <!-- 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. Diese WiFiNetworkSuggestion kann dynamisch geändert werden:
    ArrayList<WifiNetworkSuggestion> list = new ArrayList<>();
    list.add(new WifiNetworkSuggestion.Builder()
                   .setSsid(WifiInfo.sanitizeSsid(ssid))
                   .setOemPrivate(true)
                   .build());
    mWifiManager.addNetworkSuggestions(list);

Zugriff auf PANS-Netzwerke einschränken

Wenn Sie ein Netzwerk mit der OEM_PAID- oder OEM_PRIVATE-Funktion taggen, wird es als eingeschränktes Netzwerk gekennzeichnet. Eingeschränkt nutzbare Netzwerke können nur von Apps verwendet werden, die die Berechtigung CONNECTIVITY_USE_RESTRICTED_NETWORKS haben. Diese wird von OEMs verwaltet.

Apps mit dieser Berechtigung können eingeschränkte Netzwerke verwenden, sofern die Apps sie ausdrücklich anfordern. Für diese Apps werden jedoch keine eingeschränkten Netzwerke als Standard festgelegt. Für über PANS zugeordnete Apps können eingeschränkte OEM-Netzwerke als Standard festgelegt werden. Für die Nutzung dieser Apps ist dann keine Berechtigung für eingeschränkte Netzwerke erforderlich. Wenn einer solchen App ein eingeschränktes OEM-Netzwerk als Standardnetzwerk von PANS zugewiesen ist, kann sie dieses OEM-Netzwerk auch explizit anfordern, wenn sie dies wünscht.

Referenz-App prüfen

In Builds für die Nutzerbehebung von Problemen in der Automobilbranche wird eine Referenz-App (einschließlich Code) mit dem Namen NetworkPreferenceApp bereitgestellt. Dort wird gezeigt, wie Sie Folgendes tun:

  • PANS-Messwerte verwenden
  • PANS-Richtlinie festlegen
  • Legen Sie eine Standardrichtlinie für das Gerät fest.
  • Richtlinie löschen.
  • Richtlinie beim Starten anwenden
  • Verwenden Sie die API für Ablenkungen am Steuer (siehe Richtlinien zu Ablenkungen am Steuer).
  • WLAN mit OEM_PAID und OEM_PRIVATE dynamisch aktualisieren

Abbildung 3: Referenz-App

Messwerte

Um für Transparenz bei der Datennutzung zu sorgen, werden Messwerte zur Menge der über die OEM_PAID- und OEM_PRIVATE-Netzwerkzuordnungen übertragenen Daten erfasst und zur Verfügung gestellt.

Fehlerbehebung

Die meisten Probleme bei der Fehlerbehebung entstehen entweder durch die Verwendung des falschen Netzwerks durch eine App (keine Netzwerkverbindung) oder durch Datenüberschreitungen. So aktivieren Sie die Funktion für schnelle Lösungen:

  • „Connectivity“ dumpsys enthält eine Liste der aktiven appspezifischen Standardnetzwerke und der zugehörigen Apps (aus PANS zugeordnet).
  • Netd dumpsys enthält UID-IP- und Firewallregeln.
  • Netstats dumpsys enthält PANS-Messwerte pro App. Beispielsweise, welche Apps welches OEM-Netzwerk verwendet haben.

Alle dumpsys-Daten sind verfügbar, wenn Sie einen Android-Fehlerbericht erstellen.