Сховати сповіщення VPN в Android, не зупиняючи тунель
Android може показувати три різні сповіщення VPN. Дізнайтеся, якому застосунку належить те, що ви бачите, що насправді змінює кожен елемент керування і що продовжує працювати.
Можна приховати сповіщення про те, що ваш VPN працює, і тунель продовжить працювати без нього. Це дивує людей, бо повідомлення й з’єднання відчуваються одним об’єктом. Але це не так. На більшості телефонів Android запис у шторці, ключ у рядку стану та сповіщення служби, що працює, можуть надходити від трьох різних власників, і лише один із них підкоряється дозволу застосунку на сповіщення. Зрозуміти, що вам дозволено прибрати, можна, лише з’ясувавши, хто опублікував рядок, на який ви дивитеся.
Три сповіщення, три власники
Перший власник — сам застосунок VPN, який зазвичай публікує постійне сповіщення з дією підключення або відключення та таймером сеансу. Другий — власний індикатор VPN в Android: SystemUI малює значок ключа і, залежно від версії та виробника, рядок системного рівня, що повідомляє про активну мережу VPN. Третій — сповіщення про політику пристрою, яким керує робочий профіль або застосунок адміністратора. Жодне з них не є тим самим об’єктом, навіть коли вони стоять поруч у шторці.
Розберіть повідомлення, перш ніж торкатися перемикача:
| Notice | Who controls it |
|---|---|
| App-owned ongoing notice | The app's notification channel; a long-press shows the channel name and the owning package |
| Foreground-service notice | The service visibility Android requires while the tunnel runs; the app cannot simply drop it |
| System VPN indicator | SystemUI or the manufacturer, driven by the VPN network state rather than by the app's channel |
| Work-policy notice | The administrator or work-profile policy; the phone user may not have the switch at all |
Які елементи керування ви бачите, залежить від версії Android, збірки виробника та каналу, створеного застосунком. Сірий перемикач — це твердження про політику, а не запрошення її обійти. Якщо перемикача немає у вашій збірці, чесна відповідь така: саме це сповіщення не вам прибирати.
Знайдіть пакет за рядком
Натисніть і утримуйте сповіщення, а потім відкрийте його налаштування, перш ніж читати будь-що інше. Екран, на який ви потрапите, називає канал, і починаючи з Android 8 цей канал належить рівно одному пакету. Якщо канал має назву на кшталт стану VPN, а застосунок — ваш клієнт, сповіщення належить застосунку, і дивитися треба на сторінці налаштувань застосунку. Якщо ви потрапили на системну сторінку без каналу взагалі, ви дивитеся на індикатор платформи, і застосунок не допоможе.
Коли довге натискання каже недостатньо, один виклик adb перелічує, що і ким насправді опубліковано: adb shell dumpsys notification --noredact, потім пошукайте у виводі підозрілий пакет. Вам потрібен пакет, що опублікував, і ідентифікатор каналу, а не те, що можна звідти відредагувати. Ставтеся до виводу як до діагностики, бо ніщо в цьому списку не змінює сповіщення.
На керованому телефоні відповідь іноді нудна: сповіщення надходить від застосунку політики пристрою, а людина, яка тримає телефон, не та, хто може його вимкнути. У цьому разі консоль адміністратора — єдиний підтримуваний елемент керування, а власні налаштування телефона залишаються сірими, яке б меню ви не знайшли.
Що насправді змінює дозвіл Android 13
Android 13 зробив сповіщення дозволом часу виконання, тож застосунок із цільовим API 33 має запитати, перш ніж щось публікувати. Відмовте в цьому запиті, і сповіщення застосунку перестануть з’являтися у шторці, що видається тим самим рішенням, яке шукають люди. Але служба переднього плану за VPN продовжує працювати, і система досі показує її в Диспетчері завдань, навіть коли її сповіщення зникло зі шторки. Сама авторизація VPN залишається недоторканою: тунель тримається, доки ви його не відключите або не відкличете згоду застосунку на VPN.
Цей обмін гірший, ніж здається, бо сповіщення — ще й найшвидший спосіб побачити сеанс і завершити його. Приберіть його, і ви зробили телефон важчим для розуміння, нічого не змінивши в маршрутизації. Документація про дозвіл на сповіщення описує поведінку шторки; вона не описує підтримуваного способу приглушити робочий тунель.
Є ще одна особливість версії, яку варто знати: сповіщення служби переднього плану вимагає модель служби, і застосунок не вільний ховати його лише тому, що ви відмовили в дозволі. Деякі збірки залишають компактну версію видимою, інші переносять доказ у Диспетчер завдань, і ця різниця — вибір виробника, а не налаштування, яке ви проґавили.
Деморежим і трюки зі значками — не рішення
Ви знайдете поради про деморежим, про приховування значків недокументованими командами adb і про помилку інтерфейсу, через яку ключ зникає. Усе це змінює подання. Ніщо з цього не змінює маршрутизацію, політику чи авторизацію VPN, яку відстежує система, а телефон, стан мережі якого невидимий, важче діагностувати, ніж той, у якого у шторці є зайвий рядок.
Значок підключення застосунку теж не перевірка стану. Тунель може бути опущений, поки старий інтерфейс або застаріле сповіщення залишаються, а локальна служба фільтрації може підняти ключ VPN, не надіславши жодного байта на віддалений вихід. Перевіряйте фактичний стан у системних налаштуваннях VPN, а не у шторці.
Що б я змінив, по порядку
Почніть із визначення власника, потім використовуйте лише той елемент керування, який пропонує цей власник. Якщо сповіщення належить застосунку і є необов’язковим, вимкніть цей канал і залиште канал служби в спокої. Якщо це системний індикатор, прийміть його: він повідомляє факт про пристрій, а не рекламує застосунок. На керованому пристрої зупиніться на політиці адміністратора і не шукайте обхід.
Потім переконайтеся, що у вас усе ще є підтримуваний спосіб перевірити тунель і відключити його, чи то екран самого застосунку, чи сторінка системних налаштувань VPN. Телефон з одним банером менше і зрозумілим способом завершити сеанс — це той результат, який вам потрібен. Протилежне, тихіша шторка і жодного уявлення про те, чи маршрутизується трафік, не є покращенням.