O automatizare care se conecta fiabil luni întregi încetează să funcționeze după o actualizare a clientului, în timp ce același profil se conectează în continuare manual. Acest tipar indică contractul de control, nu serverul VPN. Cineva a schimbat ce acțiune acceptă aplicația sau ce identificator așteaptă, iar sarcina trimite în continuare pe cel vechi. Reconstruirea legăturii durează mai puțin decât reverificarea serverului.

Contractul aparține unei singure aplicații și unui singur interval de versiuni

OpenVPN Connect și OpenVPN for Android sunt aplicații diferite, iar un intent care numește un pachet nu face nimic în cealaltă. Înainte de a atinge sarcina, confirmă ce client este instalat și ce versiune a produs comportamentul cu care compari. Pentru Connect pe Android 3.3.2 sau mai nou,integrarea documentată cu Tasker așteaptă un ID de profil. Instrucțiunile mai vechi care pun AS sau PC înaintea unui nume afișat descriu un contract anterior, iar copierea lor într-o sarcină actuală este motivul obișnuit pentru care nu se întâmplă nimic.

Această limită de versiune explică majoritatea rapoartelor că înainte funcționa. Aplicația nu a stricat funcția; a schimbat ce acceptă funcția. Tratează intervalul de versiuni ca parte a contractului pentru care scrii.

De unde vine identificatorul

Deschide profilul dorit în Connect și copiază ID-ul de profil din detaliile profilului însuși. Folosește acea valoare în locul unui nume pe care îl recunoști din listă, pentru că numele este o etichetă, iar identificatorul este ceea cu care compară aplicația. Câmpurile de conectare din acțiunea Send Intent a Tasker arată ca blocul de mai jos, cu doar identificatorul înlocuit. Păstrează consecventă și instanța aplicației pentru profilul personal sau de lucru.

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

O copie în profilul de lucru cu același nume de pachet și un alt profil stocat va accepta intentul și nu va găsi niciun profil potrivit, ceea ce arată ca o sarcină stricată și nu ca o eroare de domeniu. Dacă profilul este reimportat sau înlocuit, tratează identificatorul ca suspect și verifică-l din nou. Reimportarea produce adesea o intrare nouă de profil chiar și atunci când numele afișat rămâne neschimbat. Verifică identificatorul înainte de a schimba orice altceva.

Lasă goale câmpurile nelegate, conform documentației. Câmpurile de categorie, tip MIME și date pe care ghidul nu le cere pot schimba modul în care Android rezolvă intentul, iar un intent rezolvat altfel poate lansa aplicația fără a porni profilul tău.

Ce face acțiunea și ce îți lasă ție

Trimiterea intentului de conectare cere aplicației să pornească un profil. Nu ocolește autorizarea pe care o cere acel profil. Connect poate afișa în continuare o solicitare, motiv pentru care cazul autonom documentat presupune nicio autorizare suplimentară și nicio credențială de conectare salvată. Tentația este să elimini această limită încorporând parole sau secrete ale cheii private într-un export Tasker partajat.

Nu face asta. Un export de sarcină este un fișier text pe care oamenii îl copiază în fire de chat, iar secretele plasate acolo sunt dezvăluite în momentul în care este partajat. Folosește credențialele de conectare salvate ale aplicației dacă profilul le necesită, și lasă solicitările MFA să rămână solicitări. Orice evită solicitarea stocând răspunsul a mutat secretul în loc să rezolve problema.

Partea de deconectare are propria acțiune documentată, și nu este un truc aplicat clientului:

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

Conectarea la un profil intenționat inexistent pentru a forța o deconectare este genul de ocolire care apare în fire vechi și apoi eșuează în tăcere după o actualizare. Folosește acțiunea explicită.

Verifică starea înainte de a rula pasul următor

O lansare reușită a intentului dovedește că cererea a fost livrată, nu că există un tunel. Dacă sarcina deschide apoi o aplicație internă,acel pas are nevoie de o condiție de pregătire cu un timp limită. O acțiune imediată după trimitere va lovi în cele din urmă o solicitare.

$ 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

Interogarea resolve confirmă că pachetul și activitatea vizate există pe acel dispozitiv, ceea ce exclude o greșeală de tastare în câmpul clasei. Descărcarea activității arată ce este într-adevăr în prim-plan după rularea sarcinii, și este cea mai ieftină modalitate de a vedea dacă aplicația a deschis o solicitare în loc să se conecteze. Rulează ambele după o sarcină eșuată în loc să ghicești care câmp este greșit. O nepotrivire în numele clasei produce o eroare imediată, în timp ce un profil lipsă nu produce nicio eroare vizibilă.

Decide proprietatea deconectării înainte de a livra sarcina. O scurtătură care dărâmă un tunel de care depinde o altă sarcină de lucru va genera un tichet de asistență care nu seamănă deloc cu cauza sa. Păstrarea a două automatizări care controlează același client creează o cursă pe care nu o poți depana din jurnale, așa că șterge acțiunea învechită odată ce cea nouă funcționează.

Articole similare