Automatyzacja, która przez miesiące łączyła się niezawodnie, przestaje działać po aktualizacji klienta, a ten sam profil nadal łączy się ręcznie. Ten wzorzec wskazuje na kontrakt sterowania, a nie na serwer VPN. Ktoś zmienił to, którą akcję akceptuje aplikacja lub którego identyfikatora oczekuje, a zadanie nadal wysyła stary. Odbudowanie powiązania zajmuje mniej czasu niż ponowne sprawdzenie serwera.

Kontrakt należy do jednej aplikacji i jednego zakresu wersji

OpenVPN Connect i OpenVPN for Android to różne aplikacje, a intent, który nazywa jeden pakiet, nie robi nic w drugiej. Zanim dotkniesz zadania, potwierdź, który klient jest zainstalowany i która wersja wytworzyła zachowanie, z którym porównujesz. W przypadku Connect na Androidzie 3.3.2 lub nowszym udokumentowana integracja z Taskerem oczekuje ID profilu. Starsze instrukcje, które stawiają AS lub PC przed nazwą wyświetlaną, opisują wcześniejszy kontrakt, a kopiowanie ich do bieżącego zadania jest zwykłą przyczyną tego, że nic się nie dzieje.

Ta granica wersji wyjaśnia większość zgłoszeń, że wcześniej działało. Aplikacja nie zepsuła funkcji; zmieniła to, co funkcja akceptuje. Traktuj zakres wersji jako część kontraktu, przeciwko któremu piszesz.

Skąd pochodzi identyfikator

Otwórz zamierzony profil w Connect i skopiuj jego ID profilu ze szczegółów samego profilu. Użyj tej wartości zamiast nazwy rozpoznawanej z listy, ponieważ nazwa jest etykietą, a identyfikator jest tym, z czym porównuje aplikacja. Pola połączenia w akcji Send Intent Taskera wyglądają jak blok poniżej, przy czym podmieniony jest tylko identyfikator. Zachowaj też spójność instancji aplikacji profilu osobistego lub służbowego.

Action: net.openvpn.openvpn.CONNECT
Extra: net.openvpn.openvpn.AUTOSTART_PROFILE_ID:'PROFILE_ID'
Extra: net.openvpn.openvpn.AUTOCONNECT:true
Package: net.openvpn.openvpn
Class: net.openvpn.unified.MainActivity
Target: Activity

Kopia w profilu służbowym o tej samej nazwie pakietu i innym zapisanym profilu przyjmie intent i nie znajdzie żadnego pasującego profilu, co wygląda na zepsute zadanie, a nie na błąd zakresu. Jeśli profil zostanie ponownie zaimportowany lub zastąpiony, uznaj identyfikator za podejrzany i sprawdź go ponownie. Ponowny import często tworzy nowy wpis profilu, nawet gdy nazwa wyświetlana się nie zmienia. Sprawdź identyfikator, zanim zmienisz cokolwiek innego.

Pozostaw niepowiązane pola puste, zgodnie z dokumentacją. Pola kategorii, typu MIME i danych, o które przewodnik nie prosi, mogą zmienić sposób rozwiązywania intentu przez Androida, a intent rozwiązywany inaczej może uruchomić aplikację bez uruchamiania profilu.

Co robi akcja i co zostawia tobie

Wysłanie intentu połączenia prosi aplikację o uruchomienie profilu. Nie omija on autoryzacji wymaganej przez ten profil. Connect może nadal pokazać monit, dlatego udokumentowany przypadek autonomiczny zakłada brak dodatkowej autoryzacji i brak zapisanych danych połączenia. Pokusa polega na usunięciu tej granicy przez osadzenie haseł lub sekretów klucza prywatnego w udostępnianym eksporcie Taskera.

Nie rób tego. Eksport zadania to plik tekstowy, który ludzie kopiują do wątków czatu, a umieszczone tam sekrety są ujawniane w chwili udostępnienia. Użyj zapisanych danych połączenia samej aplikacji, jeśli profil ich potrzebuje, i pozwól, by monity MFA pozostały monitami. Wszystko, co unika monitu przez zapisanie odpowiedzi, przeniosło sekret, zamiast rozwiązać problem.

Strona rozłączania ma własną udokumentowaną akcję i nie jest to sztuczka wobec klienta:

Action: net.openvpn.openvpn.DISCONNECT
Extra: net.openvpn.openvpn.STOP:true
Package: net.openvpn.openvpn
Class: net.openvpn.unified.MainActivity
Target: Activity

Łączenie się z celowo nieistniejącym profilem, aby wymusić rozłączenie, to rodzaj obejścia, który pojawia się w starych wątkach, a potem po aktualizacji zawodzi po cichu. Użyj jawnej akcji.

Sprawdź stan, zanim uruchomi się następny krok

Udane uruchomienie intentu dowodzi, że żądanie zostało dostarczone, a nie że istnieje tunel. Jeśli zadanie otworzy potem aplikację wewnętrzną,ten krok wymaga warunku gotowości z ograniczonym limitem czasu. Natychmiastowa akcja po wysłaniu w końcu trafi na monit.

$ adb shell cmd package resolve-activity --brief net.openvpn.openvpn
net.openvpn.openvpn/net.openvpn.unified.MainActivity
$ adb shell dumpsys activity activities | grep -i openvpn

Zapytanie resolve potwierdza, że pakiet i aktywność, na które celujesz, istnieją na tym urządzeniu, co wyklucza literówkę w polu klasy. Zrzut aktywności pokazuje, co po uruchomieniu zadania naprawdę jest na pierwszym planie, i jest to najtańszy sposób sprawdzenia, czy aplikacja otworzyła monit zamiast się połączyć. Uruchom oba po nieudanym zadaniu, zamiast zgadywać, które pole jest błędne. Niezgodność nazwy klasy daje natychmiastowy błąd, podczas gdy brakujący profil nie daje żadnego widocznego błędu.

Zdecyduj o własności rozłączania, zanim wyślesz zadanie. Skrót, który zrywa tunel, od którego zależy inne zadanie robocze, wygeneruje zgłoszenie do pomocy technicznej, które w niczym nie przypomina swojej przyczyny. Utrzymywanie dwóch automatyzacji sterujących tym samym klientem tworzy wyścig, którego nie da się zdebugować z logów, więc usuń przestarzałą akcję, gdy nowa zacznie działać.

Powiązane artykuły