Android ignoruje dotknięcie zgody VPN? Najpierw sprawdź nakładkę
Przycisk zgody, który nie przyjmuje dotknięcia, to zwykle miejscowa przeszkoda na ekranie, a nie awaria serwera czy konta. Usuń nakładkę i zachowaj ochronę.
Dotykasz przycisku zgody VPN, a okno nie reaguje. Naturalny wniosek jest taki, że aplikacja lub serwer są zepsute, więc ludzie resetują hasła, zmieniają DNS lub reinstalują klienta. Zwykle nic z tego nie dotyka przyczyny, bo Android odrzuca dotknięcia przychodzące przez przeszkodę, a ekran zgody VPN jest właśnie takim wrażliwym oknem zgody. Dotknięcie nigdy nie dociera do przycisku.
Czego ochrona naprawdę odmawia
Android chroni wrażliwe interakcje przed tapjackingiem, gdy inne okno siedzi nad oknem dialogowym i kradnie dotknięcie albo czyni je niejednoznacznym. Widok przyłącza się przez View.setFilterTouchesWhenObscured, a zdarzenie przychodzi z MotionEvent.FLAG_WINDOW_IS_OBSCURED, gdy inne okno jest oznaczone jako częściowo lub całkowicie zasłaniające. Wtedy zdarzenie jest odrzucane, zamiast trafić w złe miejsce. Android 12 (API 31) rozszerzył tę samą ochronę, blokując nieufne dotknięcia na systemowych powierzchniach zgody, dlatego okno zgody może odrzucić dotknięcie z nakładki, które inne aplikacje jeszcze by przyjęły.
Trzy rzeczy regularnie tworzą przeszkodę: aplikacja z uprawnieniem do wyświetlania nad innymi, usługa dostępności rysująca treść oraz pływający widget rejestratora ekranu lub narzędzia filtrującego. Niektóre funkcje ekranu producenta dodają własną warstwę, dlatego to samo okno może zachowywać się inaczej na dwóch telefonach z tą samą wersją Androida. Częściowo zasłaniające okno ustawia FLAG_WINDOW_IS_PARTIALLY_OBSCURED, a dotknięcie jest odrzucane, zanim przycisk je zobaczy. To właściwość ekranu, nie sieci. W chwili odrzucenia dotknięcia nic nie wysłano do serwera VPN, więc żadna zmiana po stronie serwera nie wpłynie na wynik.
Oddziel martwe dotknięcie od nieudanego połączenia
Różnica to cała diagnoza i zajmuje dziesięć sekund. Jeśli dotknięcie jest ignorowane, a okno zostaje dokładnie takie, jakie było, przeszkoda jest miejscowa. Jeśli okno się zamyka i potem pojawia się błąd, zgoda została przyjęta i jesteś w innym etapie, który potrzebuje informacji o zdarzeniach samej aplikacji.
Miejscowy odczyt potwierdzisz, sprawdzając, czy prosząca aplikacja w ogóle próbowała połączenia. Klient, który nigdy nie zapisuje próby uścisku dłoni, gdy okno zgody jest na ekranie, nie dotarł do sieci.
adb shell cmd appops get com.example.vpn SYSTEM_ALERT_WINDOW
adb shell settings get secure enabled_accessibility_servicesWypisz, kto ma uprawnienie nakładki i które usługi dostępności są włączone, a potem porównaj z tym, co działa. Nie wyłączaj samej ochrony platformy; to ona nie pozwala ukrytemu oknu odpowiedzieć w twoim imieniu na okno zgody.
Usuń przeszkodę i ponów normalny przepływ
Najpierw ustal, która aplikacja poprosiła o zgodę VPN, żebyś wiedział, jakiej zgody udzielasz. Potem zatrzymaj konkretną nakładkę przez jej własne ustawienie, a nie przez odebranie szerokiego uprawnienia, którego możesz później potrzebować. Filtr ekranu ma zwykle przełącznik w swojej aplikacji; pływający widget ma kontrolkę zamknięcia; tryb wyświetlania producenta ma przełącznik w ustawieniach wyświetlania.
Potem wróć do aplikacji VPN i poproś o zgodę ponownie, żeby okno powstało od nowa. Jeśli dotknięcie teraz działa, dostosuj zgodność nakładki lub zostaw ją wyłączoną podczas łączenia, a ochronę dotyku pozostaw włączoną.
Jeśli nie wiesz, które okno jest odpowiedzialne, usuwaj je po kolei i po każdej zmianie próbuj okna zgody. Pasek sterowania rejestratora lub pływający skrót to zwykły winowajca, a to, co usunąłeś tuż przed sukcesem, jest odpowiedzią.
Przywróć wszystko niepowiązane, co wyłączyłeś po drodze. Filtr ekranu albo tryb nocny nie są wrogiem; wrogiem jest konkretne okno, które nakłada się na okno zgody.
Czego nie robić, żeby przejść okno
Nie dawaj nieznanej aplikacji dostępu dostępności, żeby mogła nacisnąć przycisk, i nie instaluj do tego aplikacji pomocniczej. To daje dokładnie tę zdolność, której ochrona ma odmawiać, na ekranie, który autoryzuje VPN.
Nie automatyzuj też okna narzędziem wejścia. Daje ten sam wynik co złośliwa nakładka i niczego nie uczy o przyczynie.
Na urządzeniu zarządzanym polityka ograniczająca zmiany VPN jest decyzją administratora. Eksperyment z nakładką nie jest zgodą na jej obejście. Podobnie nieruchomy przycisk zgody nie jest powodem do osłabiania weryfikacji certyfikatów ani zmiany danych konta: żadne z tych ustawień nie usuwa miejscowej przeszkody dotyku.
Jeśli nadal się nie udaje, zgłoś dokładne zachowanie
Opisz okno, a nie wniosek: która aplikacja poprosiła o zgodę, czy okno zostało otwarte, czy się zamknęło, czy inne wrażliwe prośby, jak ostrzeżenia o nieznanych źródłach lub dostępności, też ignorują dotknięcia, model urządzenia i wersję Androida oraz listy nakładek i usług dostępności, które zapisałeś.
Zapytaj opiekuna wsparcia o jeszcze jedno: czy polityka urządzenia w ogóle ogranicza zmiany konfiguracji VPN. Zarządzana blokada wygląda inaczej niż zignorowane dotknięcie, a wiedza, którą widzisz, oszczędza drugą rundę.
Ten zestaw odróżnia problem zasłoniętego dotknięcia od zepsutego urządzenia wejściowego, zamrożonego okna lub blokady polityki. Mówi też następnej osobie, czy patrzeć na ekran, czy na sieć.
Wskazówki Androida dotyczące tapjackingu omawiają warunki zasłoniętych okien i API stojące za tym zachowaniem. Jeśli chcesz ślad dowodów, szukaj FLAG_WINDOW_IS_OBSCURED i FLAG_WINDOW_IS_PARTIALLY_OBSCURED na zdarzeniu, które nigdy nie dotarło do przycisku. Okno, które zostaje otwarte, jest tym, co warto zapisać, bo pokazuje, że dotknięcie zostało zatrzymane, a nie przekazane innemu oknu.