Android ignoruje klepnutie na schválenie VPN? Najprv skontrolujte prekrytie
Tlačidlo súhlasu, ktoré neprijme klepnutie, je zvyčajne miestna prekážka dotyku, nie porucha servera alebo účtu. Odstráňte prekrytie a ochranu ponechajte.
Klepnete na tlačidlo schválenia VPN a dialóg nereaguje. Prirodzeným záverom je, že aplikácia VPN alebo server sú pokazené, a tak ľudia resetujú heslá, menia DNS alebo preinštalujú klienta. Zvyčajne sa nič z toho poruchy nedotýka, pretože Android zahadzuje dotyky, ktoré prichádzajú cez prekážku, a obrazovka schválenia VPN je presne taká citlivá výzva na súhlas, ktorá túto ochranu dostáva. Klepnutie sa nikdy nedostane k tlačidlu.
Čo ochrana v skutočnosti odmieta
Android chráni citlivé interakcie pred tapjackingom, keď iné okno sedí nad dialógom a buď klepnutie ukradne, alebo ho urobí nejednoznačným. Zobrazenie sa k tomu prihlási pomocou View.setFilterTouchesWhenObscured a udalosť prichádza s MotionEvent.FLAG_WINDOW_IS_OBSCURED, keď je iné okno označené ako čiastočne alebo úplne ho prekrývajúce. Keď sa to stane, udalosť sa zahodí namiesto toho, aby bola doručená na nesprávne miesto. Android 12 (API 31) rozšíril rovnakú ochranu blokovaním nedôveryhodných dotykov v systémových plochách súhlasu, a preto dialóg schválenia môže odmietnuť klepnutie z prekrytia, ktoré by iné aplikácie ešte prijali.
Tri veci pravidelne vytvárajú prekážku: aplikácia s povolením zobrazovať nad inými aplikáciami, služba dostupnosti, ktorá kreslí obsah, a plávajúci widget z nahrávača obrazovky alebo filtračného nástroja. Niektoré obrazovkové funkcie výrobcu pridávajú aj vlastnú vrstvu, a preto sa ten istý dialóg môže správať odlišne na dvoch telefónoch s rovnakou verziou Androidu. Čiastočne prekrývajúce okno nastavuje FLAG_WINDOW_IS_PARTIALLY_OBSCURED a dotyk sa zahodí skôr, než ho tlačidlo vôbec uvidí. To je vlastnosť obrazovky, nie siete. V okamihu, keď sa klepnutie zahodí, nebolo na server VPN odoslané nič, takže žiadna zmena na strane servera nemôže ovplyvniť výsledok.
Oddeľte mŕtve klepnutie od neúspešného pripojenia
Tento rozdiel je celá diagnóza a trvá desať sekúnd. Ak sa klepnutie ignoruje a dialóg zostane presne taký, aký bol, prekážka je miestna. Ak sa dialóg zatvorí a potom sa objaví chyba, súhlas bol prijatý a prešli ste do inej fázy, ktorá potrebuje vlastné informácie o udalostiach aplikácie VPN.
Miestne čítanie môžete potvrdiť kontrolou, či sa žiadajúca aplikácia vôbec pokúsila o pripojenie. Klient, ktorý nikdy nezaznamená pokus o handshake, kým je na obrazovke dialóg súhlasu, sa k sieti nedostal.
adb shell cmd appops get com.example.vpn SYSTEM_ALERT_WINDOW
adb shell settings get secure enabled_accessibility_servicesUveďte, čo má povolenie prekrytia a ktoré služby dostupnosti sú zapnuté, potom to porovnajte s tým, čo beží. Nevypínajte samotnú ochranu platformy; práve ona bráni skrytému oknu odpovedať na výzvu na súhlas vo vašom mene.
Odstráňte prekážku a potom zopakujte bežný postup
Najprv identifikujte aplikáciu, ktorá požiadala o schválenie VPN, aby ste vedeli, aký súhlas dávate. Potom zastavte konkrétne prekrytie cez jeho vlastné nastavenie, namiesto odobratia širokého povolenia, ktoré môžete neskôr potrebovať. Obrazový filter má zvyčajne prepínač vo vlastnej aplikácii; plávajúci widget má ovládací prvok na zatvorenie; režim obrazovky výrobcu má prepínač v nastaveniach obrazovky.
Potom sa vráťte do aplikácie VPN a znova požiadajte o schválenie, aby sa dialóg vytvoril nanovo. Ak klepnutie teraz funguje, upravte správanie kompatibility prekrytia alebo ho nechajte vypnuté, kým sa pripájate, a ochranu dotyku ponechajte zapnutú.
Ak nedokážete určiť, ktoré okno je zodpovedné, odstraňujte ich po jednom a po každej zmene zopakujte dialóg súhlasu. Ovládací pruh nahrávača alebo plávajúca skratka býva zvyčajne vinníkom a to, čo ste odstránili tesne predtým, než to fungovalo, je odpoveď.
Obnovte všetko nesúvisiace, čo ste cestou vypli. Obrazový filter alebo nočný režim nie je nepriateľ; nepriateľom je konkrétne okno, ktoré sa prekrýva s dialógom.
Čo nerobiť, aby ste dialóg obišli
Nedávajte prístupnosť neznámej aplikácii, aby mohla stlačiť tlačidlo, a neinštalujte na to pomocnú aplikáciu. Tie dávajú presne tú schopnosť, ktorú má ochrana odoprieť, na obrazovke, ktorá autorizuje VPN.
Neautomatizujte dialóg ani vstupným nástrojom. Prináša rovnaký výsledok ako škodlivé prekrytie a nič vás nenaučí o príčine.
Na spravovanom zariadení je politika obmedzujúca zmeny VPN rozhodnutím správcu. Experiment s prekrytím nie je oprávnením ju obchádzať. Rovnako nereagujúce tlačidlo súhlasu nie je dôvodom oslabiť overovanie certifikátov alebo meniť prihlasovacie údaje účtu: žiadne nastavenie neodstraňuje miestnu prekážku dotyku.
Ak to stále zlyháva, nahláste presné správanie
Opíšte dialóg, nie záver: ktorá aplikácia požiadala o schválenie, či dialóg zostal otvorený alebo sa zavrel, či iné citlivé výzvy, napríklad upozornenia na neznáme zdroje alebo na dostupnosť, tiež ignorujú klepnutia, model zariadenia a verziu Androidu, a zoznamy prekrytí a dostupnosti, ktoré ste zaznamenali.
Kým ste tam, položte správcovi podpory ešte jednu otázku: či politika zariadenia vôbec obmedzuje zmeny konfigurácie VPN. Spravovaná blokácia vyzerá inak ako ignorované klepnutie a vedieť, ktorú z nich vidíte, ušetrí druhé kolo.
Táto sada odlišuje problém prekrytého dotyku od pokazeného vstupného zariadenia, zamrznutého dialógu alebo blokácie politikou. Tiež povie ďalšiemu človeku, či sa má pozerať na obrazovku alebo na sieť.
Príručka Androidu k tapjackingu pokrýva podmienky prekrytých okien a API za týmto správaním. Ak chcete stopu dôkazov, hľadajte FLAG_WINDOW_IS_OBSCURED a FLAG_WINDOW_IS_PARTIALLY_OBSCURED na udalosti, ktorá sa nikdy nedostala k tlačidlu. Dialóg, ktorý zostane otvorený, je to, čo treba zachytiť, pretože ukazuje, že klepnutie bolo zadržané a nie doručené inému oknu.