O Android ignora o toque de aprovação da VPN? Verifique a sobreposição primeiro
Um botão de consentimento que não aceita o toque geralmente é uma obstrução local do toque, não uma falha do servidor ou da conta. Remova a sobreposição e mantenha a proteção.
Você toca no botão de aprovação da VPN e a caixa de diálogo não reage. A conclusão natural é que o app de VPN ou o servidor está quebrado, então as pessoas redefinem senhas, trocam o DNS ou reinstalam o cliente. No caso habitual, nada disso toca na falha, porque o Android descarta toques que chegam através de uma obstrução, e a tela de aprovação da VPN é exatamente o tipo de aviso de consentimento sensível que recebe essa proteção. O toque nunca chega ao botão.
O que a proteção está realmente rejeitando
O Android protege interações sensíveis contra tapjacking, quando outra janela fica sobre uma caixa de diálogo e rouba o toque ou o torna ambíguo. Uma view adere a isso com View.setFilterTouchesWhenObscured, e o evento chega carregando MotionEvent.FLAG_WINDOW_IS_OBSCURED quando outra janela está marcada como parcial ou totalmente obscurecedora. Quando isso acontece, o evento é descartado em vez de entregue ao lugar errado. O Android 12 (API 31) ampliou a mesma proteção com o bloqueio de toques não confiáveis nas superfícies de consentimento do sistema, e é por isso que a caixa de diálogo de aprovação pode recusar um toque vindo de uma sobreposição que outros apps ainda aceitariam.
Três coisas produzem rotineiramente uma obstrução: um app com a permissão de exibir sobre outros apps, um serviço de acessibilidade desenhando conteúdo e um widget flutuante de um gravador de tela ou de uma ferramenta de filtro. Alguns recursos de tela do fabricante acrescentam a própria camada também, e é por isso que a mesma caixa de diálogo pode se comportar de forma diferente em dois celulares com a mesma versão do Android. Uma janela que obscurece parcialmente define FLAG_WINDOW_IS_PARTIALLY_OBSCURED, e o toque é descartado antes que o botão o veja. Isso é uma propriedade da tela, não da rede. Nada foi enviado ao servidor de VPN no momento em que o toque é descartado, então nenhuma mudança no lado do servidor pode influenciar o resultado.
Separe um toque morto de uma conexão que falhou
A distinção é todo o diagnóstico e leva dez segundos. Se o toque é ignorado e a caixa de diálogo permanece exatamente como estava, a obstrução é local. Se a caixa fecha e um erro aparece depois, o consentimento foi aceito e você passou para outro estágio que precisa das informações de evento do próprio app de VPN.
Você pode confirmar a leitura local verificando se o app que faz o pedido chegou a tentar uma conexão. Um cliente que nunca registra uma tentativa de handshake enquanto uma caixa de diálogo de consentimento está na tela não chegou à rede.
adb shell cmd appops get com.example.vpn SYSTEM_ALERT_WINDOW
adb shell settings get secure enabled_accessibility_servicesListe o que detém a permissão de sobreposição e quais serviços de acessibilidade estão ativados, depois compare com o que está em execução. Não desative a proteção da plataforma em si; é ela que impede uma janela oculta de responder a um aviso de consentimento em seu nome.
Remova a obstrução e repita o fluxo normal
Identifique primeiro o app que pediu a aprovação da VPN, para saber qual consentimento você está concedendo. Depois interrompa a sobreposição específica pela configuração dela, em vez de revogar uma permissão ampla de que você pode precisar mais tarde. Um filtro de tela geralmente tem um botão de alternância no próprio app; um widget flutuante tem um controle de fechar; um modo de tela do fabricante tem uma chave nas configurações de tela.
Volte ao app de VPN depois disso e peça a aprovação novamente, para que a caixa de diálogo seja criada do zero. Se o toque agora funciona, ajuste o comportamento de compatibilidade da sobreposição ou deixe-a desligada enquanto se conecta, e mantenha a proteção de toque ativada.
Se você não conseguir dizer qual janela é a responsável, remova uma de cada vez e repita a caixa de diálogo de consentimento depois de cada mudança. Uma barra de controle de gravador ou um atalho flutuante costuma ser o culpado, e o que você removeu imediatamente antes de funcionar é a resposta.
Restaure tudo que não tem relação com o problema e que você desligou pelo caminho. Um filtro de tela ou um modo noturno não é o inimigo; a janela específica que se sobrepõe à caixa de diálogo é.
O que não fazer para passar pela caixa de diálogo
Não conceda acesso de acessibilidade a um app desconhecido para que ele possa pressionar o botão, e não instale um app auxiliar para esse fim. Eles concedem exatamente a capacidade que a proteção existe para negar, em uma tela que autoriza uma VPN.
Também não automatize a caixa de diálogo com uma ferramenta de entrada. Isso produz o mesmo resultado que uma sobreposição maliciosa e não ensina nada sobre a causa.
Em um dispositivo gerenciado, a política que restringe mudanças de VPN é decisão do administrador. Um experimento de sobreposição não é autorização para contorná-la. Da mesma forma, um botão de consentimento sem resposta não é motivo para enfraquecer a verificação de certificado ou trocar as credenciais da conta: nenhuma dessas configurações remove uma obstrução local do toque.
Se ainda falhar, relate o comportamento exato
Descreva a caixa de diálogo, não a conclusão: qual app pediu a aprovação, se a caixa permaneceu aberta ou fechou, se outros avisos sensíveis como os de fontes desconhecidas ou de acessibilidade também ignoram toques, o modelo do dispositivo e a versão do Android, e as listas de sobreposição e de acessibilidade que você capturou.
Pergunte ao responsável pelo suporte mais uma coisa enquanto estiver aí: se a política do dispositivo restringe de alguma forma mudanças na configuração de VPN. Um bloqueio gerenciado parece diferente de um toque ignorado, e saber qual dos dois você está vendo economiza uma segunda rodada.
Esse conjunto distingue um problema de toque obscurecido de um dispositivo de entrada quebrado, de uma caixa de diálogo travada ou de um bloqueio de política. Também diz à próxima pessoa se deve olhar para a tela ou para a rede.
O guia de tapjacking do Android cobre as condições de janela obscurecida e as APIs por trás desse comportamento. Se você quiser a trilha de evidências, procure FLAG_WINDOW_IS_OBSCURED e FLAG_WINDOW_IS_PARTIALLY_OBSCURED no evento que nunca chegou ao botão. A caixa de diálogo que fica aberta é o que deve ser capturado, porque mostra que o toque foi retido em vez de entregue a outra janela.