Seleção de rede por aplicativo (PANS)

Os veículos dependem cada vez mais da conectividade para gerenciar a lista crescente de casos de uso solicitados por OEMs e proprietários de veículos, resultando em um aumento no volume de dados e custos associados. Use o recurso de seleção de rede por aplicativo (PANS) para rotear o tráfego de aplicativos especificados em redes pagas pelo OEM.

Com o PANS, você pode gerenciar o volume e o custo do uso de dados e, ao mesmo tempo, fornecer uma experiência de carro robusta, segura e conectada. BANDEJAS:

  • Consiste em uma nova API adicionada ao ConnectivityManager disponível apenas para dispositivos automotivos.
  • Fornece uma API de sugestão de Wi-Fi atualizada (consulte API de sugestão de Wi-Fi para conectividade com a Internet ) para incluir suporte para recursos de rede PANS que mudam dinamicamente.
  • Coleta métricas de suporte.
  • Fornece um aplicativo de referência.

Por que PAN?

PAN pode:

  • Atualize dinamicamente os mapeamentos de aplicativo para rede.
  • Gerencie o roteamento no nível do aplicativo sem fazer alterações nos aplicativos.
  • Somente aplicativos permitidos por OEM podem acessar as redes OEM mapeadas.
  • Os desenvolvedores de aplicativos não precisam fazer nenhuma alteração para implementar esse recurso.
  • As métricas voltadas para o usuário rastreiam o uso de dados de aplicativo para rede para redes gerenciadas por OEM.
  • O acesso à rede é seguro e não pode ser abusado por meio de casos de uso não intencionais ou aplicativos não autorizados.
  • As alterações nos mapeamentos de aplicativo para rede PANS são comunicadas aos usuários.
  • A mesma configuração de rede é aplicada a todos os usuários.

Principais vantagens

O PANS oferece aos OEMs estas vantagens principais:

  1. Os OEMs podem pagar pelo tráfego de rede em vez dos usuários:
    • As atualizações do sistema podem ser fornecidas sem custo para o usuário.
    • O uso de rede de aplicativos especificados pode ser fornecido sem custo para o usuário.
    • A telemetria e outras análises podem ser gerenciadas sem nenhum custo para o usuário.
  2. Os OEMs podem garantir que os aplicativos críticos permaneçam conectados mesmo sem um plano de dados pago pelo usuário. Por exemplo, recursos críticos de segurança, como mapas, assistente (condução com as mãos livres) e atualizações do sistema, continuam a funcionar mesmo quando o usuário não tem plano de dados.
  3. O PANS fornece granularidade adicional de controle específico para roteamento de tráfego de rede no Android. Por exemplo, os OEMs podem definir de maneira ideal uma topologia de rede lógica para o roteamento do tráfego no nível do aplicativo.

Figura 1 . Estrutura PANS

Implementando PANS

Para implementar PANS, uma nova API do ConnectivityManager , setOemNetworkPreference , é fornecida. Essa nova API mapeia aplicativos para um OemNetworkPreference . Essa API está disponível apenas para dispositivos automotivos e é anotada como @SystemApi com uma nova permissão de signature .

Figura 2. Implementar PANS

OEMNetworkPreference

OemNetworkPreference é uma abstração sobre aplicativos de mapeamento OEM_PAID e OEM_PRIVATE NetworkCapabilities por nome de pacote para uma preferência de rede . As preferências de rede permitem hierarquias de rede. Por exemplo, mapear um aplicativo para a preferência OEM_NETWORK_PREFERENCE_OEM_PAID resultará na seguinte prioridade de redes padrão atribuídas a um aplicativo: use uma rede UNMETERED primeiro, se UNMETERED não estiver disponível, use uma rede OEM_PAID e, se OEM_PAID não estiver disponível, use o sistema rede padrão.

  • OEM_PAID Usado principalmente para aplicativos que podem ser roteados em redes OEM e não OEM.
  • OEM_PRIVATE Usado principalmente para aplicativos OEM para obter acesso a uma rede dedicada a eles.
/**
* 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;

Chamando APIs PANS

Para usar APIs PANS:

  1. Use OemNetworkPreferences para mapear um aplicativo para uma preferência de rede.
  2. Chame setOemNetworkPreference com o objeto OemNetworkPreferences .
  3. Use a interface Runnable para ouvir a conclusão da API.

Por exemplo:

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

Considerações

Ao implementar o PANS, lembre-se dos seguintes pontos:

  • As preferências de rede não são mantidas nas inicializações e precisarão ser reaplicadas em cada inicialização.
  • Para criar uma preferência para um aplicativo, ele não precisa ser instalado. Portanto, as preferências de rede para aplicativos desinstalados podem ser definidas de forma proativa.
  • A qualquer momento, um aplicativo só pode ser mapeado para uma única preferência de rede.
  • As preferências de rede são usadas para definir a rede padrão de um aplicativo. Essa é a rede usada quando um aplicativo não especificou quais redes deseja usar por meio de uma das APIs especializadas. Isso não apenas cobre a grande maioria das necessidades de conectividade, mas também permite o uso contínuo de APIs especializadas, como a API NetworkRequest , para não interromper os casos de uso de aplicativos existentes. Por exemplo, quando um aplicativo deseja fazer apenas uma operação em uma rede ilimitada, o PANS não o forçará a usar outra rede.

Configurando uma rede

Uma rede com os recursos OEM_PAID ou OEM_PRIVATE deve estar disponível ao usar uma preferência de rede correspondente. O Android oferece suporte para a configuração de recursos para redes Ethernet e Wi-Fi. Para redes Ethernet, você pode usar uma sobreposição de recursos, config_ethernet_interfaces . Isso é definido em tempo de compilação.

Para Wi-Fi, a API WifiNetworkSuggestion pode ser usada com as novas APIs do Android 12, setOemPaid(Boolean) e setOemPrivate(Boolean) . Isso pode ser alterado em tempo de execução.

Considere estes exemplos:

  1. Uma sobreposição de recursos chamada config_ethernet_interfaces especifica:
    • O nome da interface a ser configurada.
    • Os valores de NetworkCapabilities desejados.
      <!-- 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. Esta sugestão de WiFiNetworkSuggestion pode ser alterada dinamicamente:
    ArrayList<WifiNetworkSuggestion> list = new ArrayList<>();
    list.add(new WifiNetworkSuggestion.Builder()
                   .setSsid(WifiInfo.sanitizeSsid(ssid))
                   .setOemPrivate(true)
                   .build());
    mWifiManager.addNetworkSuggestions(list);
    

Restringindo o acesso a redes PANS

Marcar uma rede com os recursos OEM_PAID ou OEM_PRIVATE marca essa rede como uma rede restrita . As redes restritas podem ser usadas por aplicativos que tenham a permissão CONNECTIVITY_USE_RESTRICTED_NETWORKS , que é controlada por OEMs.

Os aplicativos com essa permissão podem usar redes restritas, desde que os aplicativos os solicitem explicitamente . No entanto, esses aplicativos não terão redes restritas como padrão. Os aplicativos mapeados por meio de PANS podem ter redes OEM restritas definidas como padrão e não precisarão da permissão de rede restrita para usá-los. Quando esse aplicativo tem uma rede OEM restrita atribuída como rede padrão pelo PANS, ele também tem a capacidade de solicitar explicitamente essa rede OEM se o aplicativo optar por fazê-lo.

Revendo o aplicativo de referência

Um aplicativo de referência (incluindo código) chamado NetworkPreferenceApp é fornecido em compilações automotivas de depuração do usuário e demonstra como:

  • Consuma métricas de PANS.
  • Defina a política PANS.
  • Defina uma política padrão para o dispositivo.
  • Limpar uma política.
  • Aplique uma política na inicialização.
  • Use a API de Distração do Driver (consulte Diretrizes de Distração do Driver ).
  • Atualize dinamicamente o Wi-Fi com OEM_PAID e OEM_PRIVATE .

Figura 3. Aplicativo de referência

Métricas

Para facilitar a transparência sobre o uso de dados, as métricas são coletadas e disponibilizadas em relação à quantidade de dados transmitidos pelos mapeamentos de rede OEM_PAID e OEM_PRIVATE .

Solução de problemas

A maioria das condições de solução de problemas surge de um aplicativo usando a rede errada (sem conectividade de rede) ou de excesso de dados. Para habilitar resoluções rápidas:

  • O dumpsys de conectividade inclui uma lista de redes padrão ativas por aplicativo e seus aplicativos associados (mapeados de PANS).
  • O Netd dumpsys inclui regras de firewall e IP UID.
  • O dumpsys do dumpsys inclui métricas de PANS por aplicativo. Por exemplo, quais aplicativos usaram qual rede OEM.

Todos os dados dumpsys estão disponíveis criando um relatório de bugs do Android.