コンテンツにスキップ

しくみ

このページでは、メディア検出から Discord 表示までの流れと、外部へ送信されるデータを説明します。

【デスクトップ版 (Windows)】
WSA 内アプリ ──(ADB / 127.0.0.1:58526)──▶ WSA RPC Bridge ──IPC──▶ Discord クライアント
5秒ごとに dumpsys を取得 │
└─ アプリ名解決 (APK取得+キャッシュ)
サムネイル解決 (対応アプリのみ)
【Android 版】
音楽アプリの MediaSession ──▶ NotificationListenerService ──JNI▶ Rust ──Discord Social SDK──▶ Discord アプリ
(通知アクセス権限) 端末内で完結、イベント駆動
  1. ADB 接続 — ローカルホストの ADB サーバー (127.0.0.1:5037) に接続し、WSA の開発者モードが公開する 127.0.0.1:58526 をターゲットにします。通信は同一 PC 内のみです
  2. メディア情報の取得 — 5 秒ごとに adb shell dumpsys media_session を実行し、アクティブなセッションから曲名・アーティスト・再生状態・再生位置を解析します
  3. アプリ名の解決 — 再生中アプリの表示名は、APK を ADB で引き取って解析し、%LOCALAPPDATA%\wsa-rpc-bridge\ApkCache にキャッシュします
  4. Discord へ送信 — 検出内容に変化があったときだけ、ログイン済み Discord クライアントの IPC に接続して Rich Presence を更新します
  1. メディアセッションの監視 — 通知アクセス権限 (NotificationListenerService) を使って MediaSessionManager のアクティブセッションを取得します。ホワイトリスト登録済みアプリのみを対象とし、再生中のセッションを優先します
  2. 端末内での処理 — 取得した情報は JNI 経由で Rust 側へ渡され、UI へはイベント配信されます (通常はイベント駆動で、30 秒間隔の保険ポーリングを併用)
  3. 常駐 — フォアグラウンドサービス (種別 mediaPlayback) がプロセスを維持します。設定で常駐通知の ON/OFF が可能です
  4. Discord へ送信 — Discord Social SDK (同梱ライブラリー) で端末上の Discord アプリに直接接続し、Rich Presence を更新します。本アプリで Discord にログインする必要はありません

Rich Presence を有効にしている場合のみ、以下が送信されます。

項目 内容
曲タイトル タイトル行として表示
アーティスト名 サムネイル画像のキャプションとして表示
再生アプリ名 プレイヤー名として表示
再生位置・再生時間 進行バー (タイムスタンプ) として表示
サムネイル画像 URL 対応アプリのみ (後述)
  • アルバム名は検出しますが、Discord には送信されません (重複判定と常駐通知の表示にのみ使用)
  • 表示内容は Discord の仕様に従い、フレンドなど他のユーザーからも見える場合があります

対応アプリのプラグイン構造 (ArtworkResolver) により、再生中のアプリに応じてサムネイル URL を解決します。

  • 現在の対応:
    • ボカコレ (jp.nicovideo.nicobox) — 曲タイトルをニコニコの検索 API に送信し、一致する動画のサムネイル URL を取得
    • YouTube / YouTube Music 系 (com.google.android.youtube、com.google.android.apps.youtube.music、app.morphe.android.youtube、app.morphe.android.apps.youtube.music) — タイトルとアーティスト名をもとにした検索クエリを YouTube の検索 API (www.youtube.com/youtubei/v1/search) に送信し、一致する動画のサムネイル URL (i.ytimg.com) を取得
  • 画像本体はダウンロード・保存せず、URL のみを一時保持して Discord へ渡します
  • この通信は対応アプリの再生中にのみ発生し、詳細は プライバシーポリシー に記載しています
データ Windows Android
設定 %APPDATA%\wsa-rpc-bridge\config.json 内部ストレージ
ホワイトリスト ― (機能なし・全セッション対象) 内部ストレージ
APK 名解決キャッシュ %LOCALAPPDATA%\wsa-rpc-bridge\ApkCache ―
動作ログ %LOCALAPPDATA%\com.wsarpcbridge.app\logs (rust.log / webview.log) アプリ内部ストレージ (files/logs)

テレメトリ・クラッシュレポートの自動送信・広告は存在しません。