Seleção de rede por aplicativo (PANS)

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

Com os PANS, é possível gerenciar o volume e o custo do uso de dados e, ao mesmo tempo, dispositivos robustos, seguros e conectados. PANORAMA:

  • Consiste em uma nova API adicionada à ConnectivityManager disponível. apenas a 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 à alteração dinâmica das capacidades da rede PANS.
  • Coleta métricas de apoio.
  • Oferece um app de referência.

Por que os PANS?

Os PANS podem:

  • Atualize dinamicamente os mapeamentos de app para rede.
  • Gerencie o roteamento no nível do app sem fazer mudanças nos apps.
  • Somente apps autorizados pelo OEM podem acessar as redes OEM mapeadas.
  • Os desenvolvedores de apps não precisam fazer mudanças para implementar esse recurso.
  • Métricas voltadas ao usuário rastreiam o uso de dados de app para rede em dispositivos gerenciados pelo OEM redes VPC.
  • O acesso à rede é seguro e não pode ser usado em casos de uso não intencionais ou e apps não autorizados.
  • As alterações nos mapeamentos de app a rede do PANS são informadas aos usuários.
  • A mesma configuração de rede é aplicada a todos os usuários.

Principais vantagens

As PANS oferecem aos OEMs as seguintes 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 da rede de apps especificados pode ser fornecido sem custos financeiros 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 apps essenciais permaneçam conectados mesmo sem uma plano de dados pago pelo usuário. Por exemplo, recursos essenciais para a segurança, como Maps, Assistente (dirigir por viva-voz), e as atualizações do sistema continuam funcionando mesmo quando um usuário não tem um plano de dados.
  3. O PANS fornece granularidade adicional de controle específico para tráfego de rede de roteamento no Android. Por exemplo, os OEMs podem definir uma rede lógica e a topologia de rede para o roteamento de tráfego no nível do app.

Figura 1. Framework PANS

Implementar PANS

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

Figura 2. Implementar PANS

OemNetworkPreference

OemNetworkPreference é uma abstração sobre OEM_PAID e OEM_PRIVATE NetworkCapabilities mapeando apps pelo nome do pacote a 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: usar um UNMETERED primeiro. Se UNMETERED não estiver disponível, use um rede OEM_PAID. Se OEM_PAID não estiver disponível, use o sistema rede padrão.

  • OEM_PAID: usado principalmente para apps que podem ser roteados em ambos redes OEM e que não sejam OEM.
  • OEM_PRIVATE: usado principalmente para que apps OEM tenham acesso a um 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 PANS

Para usar as APIs PANS:

  1. Use OemNetworkPreferences para mapear um app para uma preferência de rede.
  2. Chamar setOemNetworkPreference com OemNetworkPreferences objeto.
  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 PANS, tenha em mente os seguintes pontos:

  • As preferências de rede não são mantidas nas inicializações e precisam ser reaplicada em cada inicialização.
  • Para criar uma preferência para um app, ele não precisa estar instalado. Portanto, as equipes de as preferências para apps não instalados podem ser definidas proativamente.
  • Um app só pode ser mapeado para uma única preferência de rede a qualquer momento.
  • As preferências de rede são usadas para definir a rede padrão de um app. Isso é a rede usada quando um app não especificou quais redes quer usar por meio uma das APIs especializadas. Isso não apenas atende à grande maioria das necessidades de conectividade, ela também permite o uso contínuo de APIs especializadas, como a API NetworkRequest para não prejudicar os casos de uso atuais. Por exemplo, quando um app só quer fazer em uma rede ilimitada, o PANS não o forçará a usar outra rede.

Configurar uma rede

uma rede com OEM_PAID ou OEM_PRIVATE; devem estar disponíveis ao usar uma preferência de rede correspondente. Android oferece suporte para a configuração de recursos para redes Ethernet e Wi-Fi. Para redes Ethernet, é possível usar uma sobreposição de recurso, 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 alterado no tempo de execução.

Confira estes exemplos:

  1. Uma sobreposição de recurso 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. Esse WiFiNetworkSuggestion pode ser mudado 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

Incluir tags em uma rede com OEM_PAID ou OEM_PRIVATE marca essa rede como uma rede restrita. Redes restritas pode ser usado por apps com o Permissão CONNECTIVITY_USE_RESTRICTED_NETWORKS, que é controlada por OEMs.

Apps com essa permissão podem usar redes restritas desde que os apps solicitem explicitamente eles. No entanto, esses apps não terão redes restritas como padrão. Aplicativos mapeados por meio de PANS podem ter redes OEM restritas definidas como padrão e não precisarão a permissão de rede restrita para usá-los. Quando um app tem um limite de OEM atribuída como rede padrão pelas PANS, ela também pode solicitar explicitamente essa rede OEM se o app optar por fazer isso.

Revisar o app de referência

Foi informado um app de referência (incluindo o código) chamado NetworkPreferenceApp em versões automotivas de depuração do usuário e demonstra como:

  • Consumir métricas de PANS.
  • Define a política de PANS.
  • Definir uma política padrão para o dispositivo.
  • Limpar uma política.
  • Aplica uma política na inicialização.
  • Usar a API Driver Distraction Confira as diretrizes sobre distrações do motorista.
  • Atualize o Wi-Fi dinamicamente com OEM_PAID e OEM_PRIVATE.

Figura 3. App de referência

Métricas

Para facilitar a transparência em relação ao uso de dados, métricas são coletadas e criadas disponíveis em relação ao volume de dados transmitidos pela Mapeamentos de rede OEM_PAID e OEM_PRIVATE.

Solução de problemas

A maioria das condições de solução de problemas ocorre quando um app usa a rede errada (sem conectividade de rede) ou excedentes de dados. Para ativar as resoluções rápidas:

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

Todos os dados de dumpsys são disponibilizados criando um relatório de bug do Android.