OpenVPN Connect і Tasker: ID профілю, а не ім’я
OpenVPN Connect на Android 3.3.2 або новішому приймає ID профілю, а не показане ім’я. Перебудуйте intent Tasker і прив’яжіть наступний крок до реального стану з’єднання.
Автоматизація, яка місяцями надійно підключалася, перестає працювати після оновлення клієнта, хоча той самий профіль досі підключається вручну. Цей шаблон указує на контракт керування, а не на сервер VPN. Хтось змінив, яку дію приймає застосунок або який ідентифікатор він очікує, а завдання досі надсилає старий. Перебудова зв’язку займає менше часу, ніж повторна перевірка сервера.
Контракт належить одному застосунку й одному діапазону версій
OpenVPN Connect і OpenVPN for Android — різні застосунки, і intent, який називає один пакет, в іншому нічого не робить. Перш ніж чіпати завдання, підтвердьте, який клієнт встановлено і яка версія створила поведінку, з якою ви порівнюєте. Для Connect на Android 3.3.2 або новішому задокументована інтеграція з Tasker очікує ID профілю. Старіші інструкції, які ставлять AS або PC перед показаним ім’ям, описують попередній контракт, і копіювання їх у поточне завдання — звичайна причина того, що нічого не відбувається.
Ця межа версій пояснює більшість повідомлень, що раніше це працювало. Застосунок не зламав функцію; він змінив те, що функція приймає. Розглядайте діапазон версій як частину контракту, під який ви пишете.
Звідки береться ідентифікатор
Відкрийте потрібний профіль у Connect і скопіюйте його ID профілю з даних самого профілю. Використовуйте це значення замість імені, яке ви впізнаєте зі списку, бо ім’я — це мітка, а ідентифікатор — те, з чим звіряється застосунок. Поля з’єднання в дії Send Intent у Tasker виглядають як блок нижче, причому замінено лише ідентифікатор. Тримайте також узгодженим примірник застосунку особистого або робочого профілю.
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 підтверджує, що пакет і активність, на які ви націлені, існують на цьому пристрої, що виключає друкарську помилку в полі класу. Дамп активності показує, що насправді перебуває на передньому плані після запуску завдання, і це найдешевший спосіб побачити, чи відкрив застосунок запит замість підключення. Запустіть обидва після невдалого завдання, замість того щоб гадати, яке поле неправильне. Розбіжність у імені класу дає негайну помилку, тоді як відсутній профіль не дає жодної видимої помилки.
Вирішіть, кому належить відключення, перш ніж надсилати завдання. Ярлик, який обриває тунель, від якого залежить інше робоче завдання, створить звернення до підтримки, анітрохи не схоже на свою причину. Тримання двох автоматизацій, які обидві керують одним клієнтом, створює гонку, яку ви не зможете налагодити з журналів, тому видаліть застарілу дію, щойно нова запрацює.