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 do impacto 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, além de oferecer uma experiência de carro robusta, segura e conectada. PANS:
- Consiste em uma nova API adicionada à
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 à mudança dinâmica dos recursos de rede PANS.
- Coleta métricas de suporte.
- Fornece um app de referência.
Por que PANS?
Os PANS podem:
- Atualize dinamicamente os mapeamentos de app para rede.
- Gerenciar o roteamento no nível do app sem fazer mudanças nos apps.
- Somente apps permitidos pelo OEM podem acessar as redes mapeadas do OEM.
- 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 de app para rede para redes gerenciadas pelo OEM.
- O acesso à rede é seguro e não pode ser abusado por 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:
- 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 de apps especificados pode ser fornecido sem custo para o usuário.
- A telemetria e outras análises podem ser gerenciadas sem custo para o usuário.
- Os OEMs podem garantir que os apps importantes permaneçam conectados mesmo sem um plano de dados pago pelo usuário. Por exemplo, recursos de segurança essenciais, como mapas, Google Assistente (direção sem as mãos no volante) e atualizações do sistema, continuam funcionando mesmo quando um usuário não tem um plano de dados.
- O PANS oferece mais granularidade de controle específico 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 de tráfego no nível do app.
Figura 1. Framework PANS
Implementar 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 é indicada como
@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 por nome de pacote
para uma preferência de rede. As preferências de rede permitem hierarquias de rede.
Por exemplo, o mapeamento de um app para a preferência OEM_NETWORK_PREFERENCE_OEM_PAID
resulta na seguinte prioridade de redes padrão atribuídas a um app: use uma
rede UNMETERED
primeiro. Se UNMETERED
não estiver disponível, use uma
OEM_PAID
. Se OEM_PAID
não estiver disponível, use a rede
padrão do sistema.
OEM_PAID
Usado principalmente para apps que podem ser roteados em redes OEM e não OEM.OEM_PRIVATE
Usado principalmente para apps OEM para ter 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;
Chamar APIs PANS
Para usar as APIs PANS:
- Use
OemNetworkPreferences
para mapear um app a uma preferência de rede. - Chame
setOemNetworkPreference
com o objetoOemNetworkPreferences
. - 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 dos seguintes pontos:
- As preferências de rede não são mantidas entre as inicializações e precisam ser reaplicadas em cada inicialização.
- Para criar uma preferência para 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 associado a 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
uma das APIs especializadas. Isso não apenas abrange 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 do app. 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 alterado no momento da execução.
Confira estes exemplos:
- Uma sobreposição de recurso com o nome
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>
- Esse
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
Marcar uma rede com os recursos OEM_PAID
ou OEM_PRIVATE
marca essa rede como restrita. Redes restritas
só podem ser usadas por apps que têm a
permissão CONNECTIVITY_USE_RESTRICTED_NETWORKS
, que é controlada por OEMs.
Os apps com essa permissão podem usar redes restritas desde que os apps as solicitem explicitamente. No entanto, esses apps não vão receber redes restritas como padrão. Os apps mapeados por 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 tem uma rede OEM restrita atribuída como rede 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 o código) chamado NetworkPreferenceApp
é fornecido
em builds de depuração do usuário para automóveis e demonstra como:
- Consumir métricas PANS.
- Definir a política 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 (confira as diretrizes sobre distração do motorista).
- Atualizar o Wi-Fi dinamicamente com
OEM_PAID
eOEM_PRIVATE
.
Figura 3. App de referência
Métricas
Para facilitar a transparência em relação ao 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 app que usa a rede errada (sem conectividade de rede) ou de dados em excesso. Para ativar as resoluções rápidas:
- A conectividade
dumpsys
inclui uma lista de redes padrão ativas por app e os apps associados (mapeados do PANS). - O Netd
dumpsys
inclui regras de firewall e IP UID. - O Netstats
dumpsys
inclui métricas 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.