Android ignora el toc d’aprovació de VPN? Comprova primer la capa superposada
Un botó d’aprovació que no accepta el toc sol ser un obstacle local a la pantalla, no una fallada del servidor ni del compte. Retira la superposició i conserva la protecció.
Toques el botó d’aprovació de la VPN i el diàleg no reacciona. La conclusió natural és que l’aplicació o el servidor estan espatllats, i per això la gent restableix contrasenyes, canvia el DNS o reinstal·la el client. Normalment res d’això no toca la fallada, perquè Android descarta els tocs que arriben a través d’un obstacle, i la pantalla d’aprovació de la VPN és exactament aquest tipus de diàleg de consentiment sensible. El toc no arriba mai al botó.
Què rebutja realment la protecció
Android protegeix les interaccions sensibles contra el tapjacking, en què una altra finestra se situa damunt del diàleg i roba el toc o el fa ambigu. Una vista hi opta amb View.setFilterTouchesWhenObscured, i l’esdeveniment arriba amb MotionEvent.FLAG_WINDOW_IS_OBSCURED quan una altra finestra està marcada com a parcialment o totalment obstruent. Llavors l’esdeveniment es descarta en lloc de lliurar-se al lloc equivocat. Android 12 (API 31) va ampliar la mateixa protecció amb el bloqueig de tocs no fiables a les superfícies de consentiment del sistema, i per això el diàleg d’aprovació pot rebutjar un toc d’un overlay que altres aplicacions encara acceptarien.
Tres coses produeixen habitualment un obstacle: una aplicació amb permís de mostrar-se sobre altres aplicacions, un servei d’accessibilitat que dibuixa contingut i un giny flotant d’un gravador de pantalla o d’una eina de filtre. Algunes funcions de pantalla del fabricant hi afegeixen la seva pròpia capa, i per això el mateix diàleg es pot comportar diferent en dos telèfons amb la mateixa versió d’Android. Una finestra que obstruïda parcialment estableix FLAG_WINDOW_IS_PARTIALLY_OBSCURED, i el toc es descarta abans que el botó arribi a veure-l. Això és una propietat de la pantalla, no de la xarxa. No s’ha enviat res al servidor de VPN en el moment de descartar el toc, així que cap canvi al servidor no pot influir en el resultat.
Separa un toc mort d’una connexió fallida
La distinció és tot el diagnòstic i només costa deu segons. Si el toc s’ignora i el diàleg queda exactament igual, l’obstacle és local. Si el diàleg es tanca i després apareix un error, el consentiment s’ha acceptat i has passat a una altra etapa que necessita la informació d’esdeveniments de l’aplicació.
Pots confirmar la lectura local comprovant si l’aplicació sol·licitant va intentar una connexió. Un client que no registra cap intent d’apretada de mans mentre el diàleg és a la pantalla no ha arribat a la xarxa.
adb shell cmd appops get com.example.vpn SYSTEM_ALERT_WINDOW
adb shell settings get secure enabled_accessibility_servicesLlista qui té el permís de superposició i quins serveis d’accessibilitat estan activats, i compara-ho amb el que s’executa. No desactivis la protecció de la plataforma; és el que impedeix que una finestra oculta respongui per tu a un diàleg de consentiment.
Elimina l’obstacle i torna a provar el flux normal
Identifica primer quina aplicació va demanar l’aprovació de VPN, per saber quin consentiment atorgues. Després atura la superposició concreta des de la seva pròpia configuració, no revocant un permís ampli que pots necessitar més endavant. Un filtre de pantalla sol tenir un commutador a la seva aplicació; un giny flotant té un control de tancament; un mode de pantalla del fabricant té un commutador a Configuració de pantalla.
Torna després a l’aplicació de VPN i demana l’aprovació de nou, perquè el diàleg es creï de zero. Si ara el toc funciona, ajusta el comportament de compatibilitat de la superposició o deixa-la apagada mentre et connectes, i mantén activa la protecció de toc.
Si no saps quina finestra és la responsable, treu-les d’una en una i torna a provar el diàleg després de cada canvi. La barra de control d’un gravador o una drecera flotant sol ser el culpable, i la que vas treure just abans que funcionés és la resposta.
Restaura qualsevol cosa no relacionada que hagis desactivat pel camí. Un filtre de pantalla o un mode nocturn no són l’enemic; ho és la finestra concreta que se superposa al diàleg.
Què no has de fer per passar el diàleg
No donis accés d’accessibilitat a una aplicació desconeguda perquè premi el botó, ni instal·lis una aplicació auxiliar per a això. Això atorga exactament la capacitat que la protecció existeix per denegar, en una pantalla que autoritza una VPN.
Tampoc no automatitzis el diàleg amb una eina d’entrada. Produeix el mateix resultat que una superposició maliciosa i no t’ensenya res sobre la causa.
En un dispositiu gestionat, una política que restringeix els canvis de VPN és decisió de l’administrador. Un experiment amb superposicions no és autorització per saltar-se-la. Igualment, un botó de consentiment que no respon no és motiu per debilitar la verificació de certificats ni per canviar les credencials del compte: cap de les dues opcions no elimina un obstacle local de toc.
Si encara falla, informa del comportament exacte
Descriu el diàleg, no la conclusió: quina aplicació va demanar l’aprovació, si el diàleg va quedar obert o es va tancar, si altres avisos sensibles com els d’orígens desconeguts o d’accessibilitat també ignoren els tocs, el model del dispositiu i la versió d’Android, i les llistes de superposicions i d’accessibilitat que has capturat.
Pregunta una cosa més al responsable de suport: si la política del dispositiu restringeix els canvis de configuració de VPN. Un bloqueig gestionat es veu diferent d’un toc ignorat, i saber quin tens davant estalvia una segona ronda.
Aquest conjunt distingeix un problema de toc obstruït d’un dispositiu d’entrada espatllat, d’un diàleg congelat o d’un bloqueig de política. També diu a la persona següent si ha de mirar la pantalla o la xarxa.
La guia d’Android sobre tapjacking cobreix les condicions de finestres obstruïdes i les API darrere d’aquest comportament. Si vols el rastre de proves, busca FLAG_WINDOW_IS_OBSCURED i FLAG_WINDOW_IS_PARTIALLY_OBSCURED a l’esdeveniment que no va arribar mai al botó. El diàleg que queda obert és el que cal capturar, perquè mostra que el toc es va retenir i no es va lliurar a una altra finestra.