Seleção de rede por aplicativo (PANS)

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 na pegada de dados e nos custos associados. Use o recurso Per-Application Network Selection (PANS) para rotear o tráfego de aplicativos específicos 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. PANELAS:

  • 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 PANS?

PANS 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 alterações para implementar esse recurso.
  • As métricas voltadas para o usuário rastreiam o uso de dados de aplicativo para rede para redes gerenciadas OEM.
  • O acesso à rede é seguro e não pode ser abusado por casos de uso não intencional ou aplicativos não autorizados.
  • As alterações nos mapeamentos de aplicativo para rede do PANS são comunicadas aos usuários.
  • A mesma configuração de rede é aplicada a todos os usuários.

Principais vantagens

A 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 nenhum 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 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 viva-voz) 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 o PANS, uma nova API ConnectivityManager , setOemNetworkPreference , é fornecida. Essa nova API mapeia aplicativos para um OemNetworkPreference . Esta API está disponível apenas para dispositivos automotivos e é anotada como @SystemApi com uma nova permissão 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 por um aplicativo, ele não precisa ser instalado. Portanto, as preferências de rede para aplicativos desinstalados podem ser definidas proativamente.
  • 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 apenas fazer 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 fornece 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 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 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 as solicitem explicitamente . No entanto, esses aplicativos não terão redes restritas como padrão. Os aplicativos mapeados por meio do 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 tal aplicativo tem uma rede OEM restrita atribuída como sua rede padrão pelo PANS, ele também tem a capacidade de solicitar explicitamente a referida 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:

  • Consumir métricas 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 motorista (consulte Diretrizes de distração do motorista ).
  • Atualize dinamicamente o Wi-Fi com OEM_PAID e OEM_PRIVATE .

Figura 3. Aplicativo de referência

Métricas

Para facilitar a transparência em relação ao uso de dados, 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 excesso de dados. Para habilitar resoluções rápidas:

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

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