VPNが動作しているという通知を隠しても、トンネルはそのまま動き続けます。メッセージと接続が一つのものに感じられるため、これは人を驚かせます。そうではありません。ほとんどのAndroid端末では、通知シェードの項目、ステータスバーの鍵、継続中のサービス通知は三つの異なる持ち主から出てくることがあり、そのうちアプリの通知権限に従うのは一つだけです。何を消してよいかを知るには、目の前の行を誰が出したのかを突き止めることから始まります。

三つの通知、三つの持ち主

一つ目の持ち主はVPNアプリ自身で、通常は接続または切断の操作とセッションタイマーを備えた継続通知を出します。二つ目はAndroid自身のVPNインジケーターで、SystemUIが鍵のアイコンを描き、バージョンとメーカーによっては有効なVPNネットワークを伝えるシステムレベルの行も表示します。三つ目は、仕事用プロファイルや管理者アプリが制御するデバイスポリシーの通知です。どれも同じものではなく、通知シェードに並んでいても別物です。

スイッチに触れる前に、そのメッセージを分類します:

NoticeWho controls it
App-owned ongoing noticeThe app's notification channel; a long-press shows the channel name and the owning package
Foreground-service noticeThe service visibility Android requires while the tunnel runs; the app cannot simply drop it
System VPN indicatorSystemUI or the manufacturer, driven by the VPN network state rather than by the app's channel
Work-policy noticeThe 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、その出力で疑わしいパッケージを探します。必要なのは出したパッケージとチャンネルIDであり、そこから編集できる何かではありません。この一覧は何も通知を変えないので、出力は診断として扱います。

管理された端末では答えが地味なこともあります:通知はデバイスポリシーのアプリから出ており、端末を持っている人が切れる人とは限りません。その場合、管理者コンソールが唯一の対応手段で、端末自身の設定はどのメニューを探しても灰色のままです。

Android 13の権限が実際に変えるもの

Android 13は通知を実行時の権限にしたので、API 33を対象とするアプリは何かを出す前に尋ねる必要があります。その要求を拒否すればアプリの通知はシェードに出なくなり、これが探していた解決策のように感じられます。しかしVPNの背後のフォアグラウンドサービスは動き続け、通知がシェードから消えてもシステムはタスクマネージャーにそのサービスを表示します。VPNの許可自体は無傷です:切断するかアプリのVPN同意を取り消すまで、トンネルは上がったままです。

その取引は、通知がセッションを見て終わらせる最速の手段でもあるため、見た目より悪いものです。通知を消すと、ルーティングを何も変えないまま端末を理解しにくくしただけになります。通知権限のドキュメントはシェードの挙動を説明していますが、動作中のトンネルを黙らせる対応方法は説明していません。

もう一つ知っておくべきバージョンの違いがあります:フォアグラウンドサービスの通知はサービスモデルが要求するもので、権限を拒否したからといってアプリが勝手に隠せるものではありません。簡略版を見せ続けるビルドもあれば、証拠をタスクマネージャーへ移すビルドもあり、その差はメーカーの選択であって、自分が見落とした設定ではありません。

デモモードとアイコンの小技は解決策ではない

デモモード、非公開のadbコマンドでアイコンを隠す方法、鍵が消えるUIの不具合についての助言が見つかるでしょう。どれも見た目を変えるだけです。ルーティング、ポリシー、システムが追跡するVPNの許可は何も変わりませんし、ネットワーク状態が見えない端末は、シェードに一行増えた端末よりトラブルシュートが難しくなります。

アプリの接続アイコンも健全性の確認ではありません。トンネルが落ちていても古いインターフェースや古い通知が残ることがあり、ローカルのフィルタリングサービスはリモートの出口に一バイトも送らずにVPNの鍵を上げることができます。実際の状態はシェードではなく、システムのVPN設定で確認してください。

私なら何を変えるか、順番に

まず持ち主を特定し、その持ち主が用意する設定だけを使います。通知がアプリのもので任意なら、そのチャンネルをオフにしてサービス用チャンネルはそのままにします。システムのインジケーターなら、アプリの宣伝ではなく端末の事実を伝えているのだから、受け入れます。管理された端末では管理者のポリシーで止まり、回避策を探しません。

次に、トンネルを確認して切断する対応手段がまだあることを、アプリ自身の画面でもシステムのVPN設定ページでもかまわないので、確かめます。バナーが一つ減り、セッションを切る手段がはっきりしている端末が望む結果です。逆に、シェードが静かになり、通信がルーティングされているか分からないのは改善ではありません。

関連記事