Seleção de rede por aplicativo (PANS, na sigla em inglês)

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

Com o PANS, é possível gerenciar o volume e o custo do uso de dados, oferecendo ao mesmo tempo uma experiência robusta, segura e conectada. PANS:

  • Consiste em uma nova API adicionada a ConnectivityManager disponível somente 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 à mudança dinâmica dos recursos de rede PANS.
  • Coleta métricas de suporte.
  • Fornece um app de referência.

Por que usar o PANS?

Os PANs podem:

  • Atualizar dinamicamente os mapeamentos de app para rede.
  • Gerenciar o roteamento no nível do app sem fazer mudanças nos aplicativos.
  • Somente apps permitidos pelo OEM podem acessar as redes mapeadas.
  • Os desenvolvedores de apps não precisam fazer nenhuma mudança para implementar esse recurso.
  • As métricas voltadas ao usuário rastreiam o uso de dados do app para a rede em redes gerenciadas pelo OEM.
  • O acesso à rede é seguro e não pode ser usado indevidamente em casos de uso não intencionais ou apps não autorizados.
  • As mudanças nos mapeamentos de app para rede do 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 financeiro para o usuário.
    • O uso de rede dos apps especificados pode ser fornecido sem custo financeiro para o usuário.
    • A telemetria e outras análises podem ser gerenciadas sem custo financeiro para o usuário.
  2. Os OEMs podem garantir que os apps críticos permaneçam conectados mesmo sem um plano de dados pago pelo usuário. Por exemplo, recursos essenciais para a segurança, como mapas, Google Assistente (direção sem usar as mãos) e atualizações do sistema, continuam funcionando mesmo quando um usuário não tem um plano de dados.
  3. O PANS oferece mais granularidade de controle específica para o 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 app.

Implementar o PANS

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

OemNetworkPreference

OemNetworkPreference é uma abstração de OEM_PAID e OEM_PRIVATE NetworkCapabilities que mapeia apps por nome do pacote para uma preferência de rede. As preferências de rede permitem hierarquias de rede. Por exemplo, mapear um app para a preferência OEM_NETWORK_PREFERENCE_OEM_PAID resulta na seguinte prioridade de redes padrão atribuídas a um app: primeiro, use uma rede UNMETERED. Se ela não estiver disponível, use uma rede OEM_PAID. Se OEM_PAID não estiver disponível, use a rede padrão do sistema.UNMETERED

  • OEM_PAID Usado principalmente para apps que podem ser roteados em redes OEM e não OEM.
  • OEM_PRIVATE Usado principalmente para apps de OEM para acessar 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;

Chamar APIs do PANS

Para usar as APIs PANS:

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

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 do seguinte:

  • As preferências de rede não são mantidas entre as inicializações e precisam ser aplicadas novamente em cada inicialização.
  • Para criar uma preferência por um app, ele não precisa estar instalado. Portanto, as preferências de rede para apps desinstalados podem ser definidas de forma proativa.
  • A qualquer momento, um app 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 app. Essa é a rede usada quando um app não especifica quais redes quer usar por meio de uma das APIs especializadas. Além de atender à grande maioria das necessidades de conectividade, isso também permite o uso contínuo de APIs especializadas, como a API NetworkRequest, para não prejudicar os casos de uso de apps atuais. Por exemplo, quando um app só quer fazer uma operação em uma rede sem medição, o PANS não força o uso de outra rede.

Configurar uma rede

Uma rede com os recursos OEM_PAID ou OEM_PRIVATE precisa estar disponível ao usar uma preferência de rede correspondente. O Android oferece suporte à configuração de recursos para redes Ethernet e Wi-Fi. Para redes Ethernet, use uma sobreposição de recursos, config_ethernet_interfaces. Isso é definido no momento da 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 mudado no tempo de execução.

Confira estes exemplos:

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

Restringir o acesso a redes PANs

Ao marcar uma rede com os recursos OEM_PAID ou OEM_PRIVATE, ela se torna uma rede restrita. As redes restritas podem ser usadas por apps que têm a permissão CONNECTIVITY_USE_RESTRICTED_NETWORKS, controlada pelos OEMs.

Os apps com essa permissão podem usar redes restritas desde que solicitem explicitamente essas redes. No entanto, esses apps não terão redes restritas como padrão. Os apps mapeados pelo PANS podem ter redes OEM restritas definidas como padrão e não precisam da permissão de rede restrita para usá-las. Quando um app desse tipo tem uma rede OEM restrita atribuída como padrão pelo PANS, ele também pode solicitar explicitamente essa rede OEM, se quiser.

Analisar o app de referência

Um app de referência (incluindo código) chamado NetworkPreferenceApp é fornecido em builds automotivos de depuração do usuário e demonstra como:

  • Consumir métricas do PANS.
  • Defina a política de PANS.
  • Defina uma política padrão para o dispositivo.
  • Limpar uma política.
  • Aplicar uma política na inicialização.
  • Use a API Driver Distraction (consulte as diretrizes de distração do motorista).
  • Atualize dinamicamente o Wi-Fi com OEM_PAID e OEM_PRIVATE.

Métricas

Para facilitar a transparência no uso de dados, coletamos e disponibilizamos métricas sobre a quantidade de dados transmitidos nos 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 app usando a rede errada (sem conectividade de rede) ou excedendo o limite de dados. Para ativar as resoluções rápidas:

  • A conectividade dumpsys inclui uma lista de redes padrão ativas por app e os apps associados a elas (mapeados do PANS).
  • O Netd dumpsys inclui regras de firewall e IP do UID.
  • O Netstats dumpsys inclui métricas de PANS por app. Por exemplo, quais apps usaram qual rede OEM.

Todos os dados de dumpsys estão disponíveis ao criar um bugreport do Android.