Netzwerkauswahl pro Anwendung (PANS)

Fahrzeuge verlassen sich zunehmend auf Konnektivität, um die wachsende Liste von Anwendungsfällen zu verwalten, die sowohl von OEMs als auch von Fahrzeugbesitzern gefordert werden, was zu einem größeren Datenfußabdruck und den damit verbundenen Kosten führt. Verwenden Sie die PANS-Funktion (Per-Application Network Selection) , um den Datenverkehr bestimmter Apps in vom OEM bezahlten Netzwerken weiterzuleiten.

Mit PANS können Sie das Volumen und die Kosten der Datennutzung verwalten und gleichzeitig ein robustes, sicheres und vernetztes Fahrzeugerlebnis bieten. PFANNEN:

  • Besteht aus einer neuen API, die ConnectivityManager hinzugefügt wurde und nur für Automobilgeräte verfügbar ist.
  • Bietet eine aktualisierte Wi-Fi-Vorschlags-API (siehe Wi-Fi-Vorschlags-API für Internetkonnektivität ), um Unterstützung für sich dynamisch ändernde PANS-Netzwerkfunktionen zu bieten.
  • Sammelt unterstützende Kennzahlen.
  • Bietet eine Referenz-App.

Warum PANS?

PANS kann:

  • Aktualisieren Sie App-zu-Netzwerk-Zuordnungen dynamisch.
  • Verwalten Sie das Routing auf App-Ebene, 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.
  • Benutzerbezogene Metriken verfolgen die App-zu-Netzwerk-Datennutzung für OEM-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 Benutzern mitgeteilt.
  • Für alle Benutzer gilt die gleiche Netzwerkkonfiguration.

Kernvorteile

PANS bietet OEMS die folgenden Kernvorteile:

  1. OEMs können für den Netzwerkverkehr statt für Benutzer bezahlen:
    • Systemaktualisierungen können dem Benutzer kostenlos zur Verfügung gestellt werden.
    • Die Netzwerknutzung bestimmter Apps kann dem Benutzer kostenlos zur Verfügung gestellt werden.
    • Telemetrie und andere Analysen können für den Benutzer kostenlos verwaltet werden.
  2. OEMs können sicherstellen, dass wichtige Apps auch ohne einen vom Benutzer bezahlten Datentarif verbunden bleiben. Beispielsweise funktionieren sicherheitskritische Funktionen wie Karten, Assistent (freihändiges Fahren) und Systemaktualisierungen auch dann weiterhin, wenn ein Benutzer keinen Datentarif hat.
  3. PANS bietet eine zusätzliche Granularität der Steuerung speziell für das Routing des Netzwerkverkehrs in Android. Beispielsweise können OEMs eine logische Netzwerktopologie für die Weiterleitung des Datenverkehrs auf App-Ebene optimal definieren.

Abbildung 1 . PANS-Framework

Implementieren Sie PANS

Zur Implementierung von PANS wird eine neue ConnectivityManager API, setOemNetworkPreference , bereitgestellt. Diese neue API ordnet Apps einer OemNetworkPreference zu. Diese API ist nur für Automobilgeräte verfügbar und ist als @SystemApi mit einer neuen signature versehen.

Abbildung 2. PANS implementieren

OemNetworkPreference

OemNetworkPreference ist eine Abstraktion über OEM_PAID und OEM_PRIVATE NetworkCapabilities , die Apps nach Paketnamen einer Netzwerkpräferenz zuordnet. Netzwerkeinstellungen ermöglichen Netzwerkhierarchien. Wenn Sie beispielsweise eine App der Einstellung OEM_NETWORK_PREFERENCE_OEM_PAID zuordnen, ergibt sich die folgende Priorität der einer App zugewiesenen Standardnetzwerke: Verwenden Sie zuerst ein UNMETERED Netzwerk. Wenn UNMETERED nicht verfügbar ist, verwenden Sie ein OEM_PAID Netzwerk. Wenn OEM_PAID nicht verfügbar ist, verwenden Sie den Systemstandard Netzwerk.

  • OEM_PAID Wird hauptsächlich für Apps verwendet, die sowohl in OEM- als auch in Nicht-OEM-Netzwerken weitergeleitet werden können.
  • OEM_PRIVATE Wird hauptsächlich für OEM-Apps verwendet, um Zugriff auf ein ihnen gewidmetes Netzwerk zu erhalten.
/**
* 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;

Rufen Sie PANS-APIs auf

So verwenden Sie PANS-APIs:

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

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

Überlegungen

Beachten Sie bei der Implementierung von PANS die folgenden Punkte:

  • Netzwerkeinstellungen bleiben nicht bei jedem Start erhalten und müssen bei jedem Start erneut angewendet werden.
  • Um eine Voreinstellung für eine App zu erstellen, muss diese nicht installiert sein. Daher können Netzwerkeinstellungen für deinstallierte Apps proaktiv festgelegt werden.
  • Zu jedem Zeitpunkt kann eine App nur einer einzigen Netzwerkpräferenz zugeordnet werden.
  • Netzwerkeinstellungen werden verwendet, um das Standardnetzwerk einer App festzulegen. Dies ist das Netzwerk, das verwendet wird, wenn eine App nicht über eine der speziellen APIs angegeben hat, welche Netzwerke sie verwenden möchte. Dies deckt nicht nur den Großteil der Konnektivitätsanforderungen ab, sondern ermöglicht auch die fortgesetzte Nutzung spezialisierter APIs wie der NetworkRequest API, um bestehende App-Anwendungsfälle nicht zu beeinträchtigen. Wenn eine App beispielsweise einen Vorgang nur über ein nicht gemessenes Netzwerk ausführen möchte, wird sie von PANS nicht gezwungen, ein anderes Netzwerk zu verwenden.

Konfigurieren Sie ein Netzwerk

Bei Verwendung einer entsprechenden Netzwerkeinstellung muss ein Netzwerk mit den Funktionen OEM_PAID oder OEM_PRIVATE verfügbar sein. Android bietet Unterstützung für die Konfiguration von Funktionen für Ethernet- und Wi-Fi-Netzwerke. Für Ethernet-Netzwerke können Sie ein Ressourcen-Overlay verwenden, config_ethernet_interfaces . Dies wird zur Kompilierungszeit festgelegt.

Für WLAN kann die WifiNetworkSuggestion -API mit den neuen Android 12-APIs setOemPaid(Boolean) und setOemPrivate(Boolean) verwendet werden. Dies 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. Dieser 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);
    

Beschränken Sie den Zugriff auf PANS-Netzwerke

Wenn Sie ein Netzwerk entweder mit den Funktionen OEM_PAID oder OEM_PRIVATE kennzeichnen, wird dieses Netzwerk als eingeschränktes Netzwerk markiert. Eingeschränkte Netzwerke können nur von Apps verwendet werden, die über die Berechtigung CONNECTIVITY_USE_RESTRICTED_NETWORKS verfügen, die von OEMs gesteuert wird.

Apps mit dieser Berechtigung können eingeschränkte Netzwerke nutzen , sofern die Apps dies ausdrücklich anfordern . Diese Apps erhalten jedoch standardmäßig keine eingeschränkten Netzwerke. Für Apps, die über PANS zugeordnet werden, können eingeschränkte OEM-Netzwerke als Standard festgelegt sein und sie benötigen keine eingeschränkte Netzwerkberechtigung, um sie zu verwenden. Wenn einer solchen App ein eingeschränktes OEM-Netzwerk von PANS als Standardnetzwerk zugewiesen wurde, hat sie auch die Möglichkeit, dieses OEM-Netzwerk explizit anzufordern, wenn die App dies wünscht.

Sehen Sie sich die Referenz-App an

Eine Referenz-App (einschließlich Code) mit dem Namen NetworkPreferenceApp wird in Automotive-Builds für Benutzerdebuggen bereitgestellt und demonstriert, wie man:

  • PANS-Metriken nutzen.
  • Legen Sie die PANS-Richtlinie fest.
  • Legen Sie eine Standardrichtlinie für das Gerät fest.
  • Löschen Sie eine Richtlinie.
  • Wenden Sie beim Booten eine Richtlinie an.
  • Verwenden Sie die Fahrerablenkungs-API (siehe Richtlinien zur Fahrerablenkung ).
  • Aktualisieren Sie WLAN dynamisch mit OEM_PAID und OEM_PRIVATE .

Abbildung 3. Referenz-App

Metriken

Um die Transparenz der Datennutzung zu erleichtern, werden Metriken zur Menge der über die Netzwerkzuordnungen OEM_PAID und OEM_PRIVATE übertragenen Daten gesammelt und verfügbar gemacht.

Fehlerbehebung

Die meisten Probleme bei der Fehlerbehebung sind darauf zurückzuführen, dass eine App das falsche Netzwerk verwendet (keine Netzwerkverbindung) oder dass es zu Datenüberschreitungen kommt. So aktivieren Sie schnelle Lösungen:

  • Connectivity dumpsys enthält eine Liste der aktiven Standardnetzwerke pro App und der zugehörigen Apps (zugeordnet von PANS).
  • Netd dumpsys enthält UID-IP- und Firewall-Regeln.
  • Netstats dumpsys enthält PANS-Metriken pro App. Zum Beispiel, welche Apps welches OEM-Netzwerk verwendet haben.

Alle dumpsys Daten sind durch die Erstellung eines Android-Fehlerberichts verfügbar.