Ավտոմատացումը, որը ամիսներ շարունակ վստահելիորեն միանում էր, դադարում է աշխատել հաճախորդի թարմացումից հետո, մինչդեռ նույն պրոֆիլը ձեռքով դեռ միանում է։ Այս օրինաչափությունը մատնանշում է կառավարման պայմանագիրը, ոչ թե VPN սերվերը։ Ինչ-որ մեկը փոխել է, թե հավելվածն որ գործողությունն է ընդունում կամ որ նույնացուցիչն է սպասում, և առաջադրանքը դեռ ուղարկում է հինը։ Կապի վերակառուցումը ավելի քիչ ժամանակ է պահանջում, քան սերվերի կրկնակի ստուգումը։

Պայմանագիրը պատկանում է մեկ հավելվածի և մեկ տարբերակային միջակայքի

OpenVPN Connect-ը և OpenVPN for Android-ը տարբեր հավելվածներ են, և մեկ փաթեթ անվանող intent-ը մյուսում ոչինչ չի անում։ Նախքան առաջադրանքին դիպչելը հաստատեք, թե որ հաճախորդն է տեղադրված և որ տարբերակն է ստեղծել այն վարքը, որի հետ համեմատում եք։ Android 3.3.2 կամ ավելի նոր Connect-ի համար փաստաթղթավորված Tasker ինտեգրացիան սպասում է պրոֆիլի ID։ Հին հրահանգները, որոնք ցուցադրվող անունից առաջ դնում են AS կամ PC, նկարագրում են նախորդ պայմանագիրը, և դրանք ընթացիկ առաջադրանքի մեջ պատճենելը սովորական պատճառն է, թե ինչու ոչինչ չի պատահում։

Այդ տարբերակային սահմանը բացատրում է «նախկինում աշխատում էր» հաղորդումների մեծ մասը։ Հավելվածը չկոտրեց հատկությունը, այլ փոխեց, թե հատկությունն ինչ է ընդունում։ Տարբերակային միջակայքը դիտարկեք որպես պայմանագրի մաս, որի դեմ գրում եք։

Որտեղից է գալիս նույնացուցիչը

Բացեք նպատակային պրոֆիլը Connect-ում և պատճենեք նրա պրոֆիլի ID-ն հենց պրոֆիլի մանրամասներից։ Օգտագործեք այդ արժեքը ցանկից ճանաչելի անվան փոխարեն, քանի որ անունը պիտակ է, իսկ նույնացուցիչն այն է, ինչի հետ հավելվածը համեմատում է։ Tasker-ի Send Intent գործողության միացման դաշտերը նման են ստորև բերված բլոկին, ընդ որում փոխարինված է միայն նույնացուցիչը։ Անհատական կամ աշխատանքային պրոֆիլի հավելվածի օրինակը նույնպես հետևողական պահեք։

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

Աշխատանքային պրոֆիլում գտնվող պատճենը, որն ունի նույն փաթեթի անունը և այլ պահված պրոֆիլ, կընդունի intent-ը և չի գտնի համապատասխան պրոֆիլ, ինչը կոտրված առաջադրանքի տեսք ունի, ոչ թե շրջանակի սխալի։ Եթե պրոֆիլը նորից ներմուծվի կամ փոխարինվի, նույնացուցիչը կասկածելի համարեք և նորից ստուգեք։ Կրկնակի ներմուծումը հաճախ նոր պրոֆիլային գրառում է ստեղծում, նույնիսկ երբ ցուցադրվող անունը չի փոխվում։ Ստուգեք նույնացուցիչը նախքան որևէ այլ բան փոխելը։

Անկապ դաշտերը թողեք դատարկ, ինչպես փաստաթղթավորված է։ Կատեգորիայի, MIME տեսակի և տվյալների դաշտերը, որոնք ուղեցույցը չի պահանջում, կարող են փոխել, թե Android-ը ինչպես է լուծում intent-ը, և այլ կերպ լուծված intent-ը կարող է հավելվածը բացել առանց ձեր պրոֆիլը գործարկելու։

Ինչ է անում գործողությունը և ինչ է թողնում ձեզ

Միացման intent-ն ուղարկելը հավելվածից խնդրում է գործարկել պրոֆիլ։ Այն չի շրջանցում այն լիազորումը, որը պահանջում է այդ պրոֆիլը։ Connect-ը կարող է դեռ ցույց տալ հարցում, դրա համար է, որ փաստաթղթավորված ինքնավար դեպքը ենթադրում է լրացուցիչ լիազորում և պահված միացման տվյալներ չկան։ Գայթակղությունը այդ սահմանը հեռացնելն է՝ գաղտնաբառերը կամ անձնական բանալու գաղտնիքները համօգտագործվող Tasker արտահանման մեջ ներառելով։

Մի արեք դա։ Առաջադրանքի արտահանումը տեքստային ֆայլ է, որը մարդիկ պատճենում են չաթերի մեջ, և այնտեղ դրված գաղտնիքները բացահայտվում են այն պահին, երբ այն համօգտագործվում է։ Օգտագործեք հավելվածի սեփական պահված միացման տվյալները, եթե պրոֆիլին դրանք պետք են, և թողեք MFA հարցումները մնան հարցումներ։ Ամեն ինչ, որ խուսափում է հարցումից՝ պահելով պատասխանը, տեղափոխել է գաղտնիքը, այլ ոչ թե լուծել խնդիրը։

Անջատման կողմն ունի իր փաստաթղթավորված գործողությունը, և դա հաճախորդի դեմ խորամանկություն չէ՝

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

Դիտավորյալ գոյություն չունեցող պրոֆիլին միանալը՝ անջատումը պարտադրելու համար, այն շրջանցման տեսակն է, որը հանդիպում է հին թեմաներում և հետո թարմացումից հետո լուռ ձախողվում։ Օգտագործեք բացահայտ գործողությունը։

Ստուգեք վիճակը նախքան հաջորդ քայլը կաշխատի

intent-ի հաջող գործարկումը ապացուցում է, որ հարցումը հասցվել է, ոչ թե որ թունել գոյություն ունի։ Եթե առաջադրանքը հետո բացում է ներքին հավելված,այդ քայլին պետք է սահմանափակ ժամկետով պատրաստականության պայման։ Ուղարկելուց անմիջապես հետո արված գործողությունը վերջիվերջո կհանդիպի հարցման։

$ 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

resolve հարցումը հաստատում է, որ փաթեթը և ակտիվությունը, որոնք թիրախավորում եք, գոյություն ունեն այդ սարքում, ինչը բացառում է դասի դաշտում տպագրական սխալը։ Ակտիվության արտածումը ցույց է տալիս, թե ձեր առաջադրանքից հետո իրականում ինչ է առաջին պլանում, և դա ամենաէժան միջոցն է տեսնելու, թե արդյոք հավելվածը բացել է հարցում, այլ ոչ թե միացել։ Գործարկեք երկուսն էլ անհաջող առաջադրանքից հետո, փոխանակ գուշակեք, թե որ դաշտն է սխալ։ Դասի անվան անհամապատասխանությունը անմիջական սխալ է տալիս, մինչդեռ բացակայող պրոֆիլը տեսանելի սխալ ընդհանրապես չի տալիս։

Որոշեք անջատման պատկանելությունը նախքան առաջադրանքն ուղարկելը։ Կարճուղին, որը քանդում է թունել, որից կախված է մեկ այլ աշխատանքային առաջադրանք, կստեղծի աջակցության տոմս, որն իր պատճառին ամենևին նման չէ։ Երկու ավտոմատացում պահելը, որոնք երկուսն էլ կառավարում են նույն հաճախորդին, ստեղծում է մրցավազք, որը հնարավոր չէ վերացնել մատյաններից, այնպես որ ջնջեք հնացած գործողությունը, հենց որ նորը աշխատի։

Առնչվող հոդվածներ