隐私政策
最后更新:2026-10-07 · 适用于轻听 Android 端与 Windows 桌面端
轻听是本地优先的音乐应用。这一页说明我们收集什么、不收集什么。
先看结论
- 不采集 IMEI / OAID / 通讯录 / 位置 / 通话记录 / 短信 / 相册 / 剪切板
- 不采集 你的播放历史(听歌统计留在设备本地数据库)
- 不向第三方音源平台发送你的任何账号信息
- 唯一会被送出的「个人信息」是你主动填写的(账号、反馈内容、上传的头像)
- 统计上报匿名、免登录,且只覆盖 JS/UTS 层可捕获的运行错误;原生崩溃不采集
- 账号可以自助注销:凭密码确认,注销后停用并匿名化,全端下线
1. 我们收集什么
1.1 你主动提供的
| 数据 | 何时 | 用途 |
|---|---|---|
| 用户名 / 密码 | 注册登录 | 账号体系(密码在服务端加盐存储,客户端不保存明文) |
| 邮箱 | 注册 / 找回密码 | 账号标识、接收验证码 |
| 昵称 / 头像 / 性别 | 你修改资料时 | 展示 |
| 反馈内容 + 你填的联系方式 | 提交意见反馈时 | 处理问题 |
| 歌单封面图片 | 你上传时 | 展示在自建服务上 |
头像与歌单封面上传到自建对象存储,不经过任何第三方平台。上传通道有三条硬限制 (服务端强制,客户端不额外放宽):
| 限制 | 取值 |
|---|---|
| 单文件大小 | ≤ 2 MB |
| 文件类型 | image/png · image/jpeg · image/webp |
| 频率 | 每个用户每天 2 次 |
上传前需要登录,凭服务端签发的一次性预签名票据直传对象存储;登记完成后服务端会 校验完整内容(而不是只信任声明的类型)。头像固定存放在 qt-media/avatar 目录,客户端不能指定其他路径。
1.2 自动采集的(匿名)
使用情况统计,匿名、免登录,用于判断功能有没有人用、崩溃集中在哪个版本:
| 字段 | 取值 |
|---|---|
| 匿名设备 ID | 首次启动随机生成的 UUID,不是硬件标识 |
| 应用版本 | 形如 主.次.修订 的版本号 |
| 平台 / 系统版本 | 如 app-android / Android 14、app-windows / Windows 10/11 |
| 设备型号 | 如 Pixel 6(桌面端固定 PC) |
| 事件类型 | 冷启动、前后台切换(带停留时长)、页面浏览、运行错误 |
事件类型一共六种:launcher(冷启动)、show(回前台)、hide(退后台,带本次 前台停留时长)、page(页面浏览)、error(JS/UTS 运行错误)、custom(预留, 当前未使用)。只有 error 事件会额外携带错误类型(js / network / biz)、 消息与堆栈。
行为细节:
- 内存队列,10 秒或满 50 条批量上报一次;服务端单次上限 200 条,超量自动分片
- 失败重试 ≤ 3 次后丢弃该批;队列上限 500 条,超出丢最旧
- 退后台时队列持久化到本机,下次冷启动补报
- 所有采集入口都有
try/catch包裹,任何异常都不影响 App 主流程 - 采集只覆盖 JS/UTS 层可捕获的运行错误(含 message / stack / 页面 / 版本)。 原生崩溃(进程死亡 / NDK / ANR)不做采集——我们没部署 Sentry,也不打算部署
上报前会对超长字段做截断,避免把无意义的巨量文本传出去:
| 字段 | 上限 | 超限处理 |
|---|---|---|
错误消息 message | 1000 字符 | 截断 |
错误堆栈 stack | 16000 字符 | 截断 |
附加信息 extra | 2048 字符 | 整块丢弃,保事件本体 |
上报目标是自建后端 POST /api/v1/app/stat/report,不进 token 体系——也就是说 未登录也会上报,且上报内容与你是否登录无关。
提交意见反馈时会上送设备信息
「关于 / 意见反馈」提交时,设备型号、系统版本、应用版本号会随反馈内容一并 上传到自建后端(后端表 sys_feedback 的 device / os / app_version 列)。 这是为了定位问题——你提交的是 bug,我们需要知道它发生在什么设备上。 除此之外不做任何额外采集。联系方式一栏可留空。
1.3 请求头
凡是请求自建后端(astral 网关)的调用,都会带上四个头:
| 头名 | 示例 |
|---|---|
X-App-Ut | app-android / app-ios / app-windows |
X-App-Version | 当前应用版本号 |
X-Device | 设备型号(≤128 字符) |
X-OS | 系统版本(≤64 字符) |
三条硬约束(代码里写死的红线):
- 只给自建后端的请求加 —— 第三方直链与音源加速探测不会带上,不泄露本机信息
- 对象存储预签名上传(头像 / 封面)绝对不带 —— 自定义头会破坏签名校验
- 空值宁可不加头,也不写空字符串
这组头有两个消费方:接口统计(用于服务端按端 / 版本聚合接口耗时)与意见反馈入库。 字段名、取值与长度上限的权威定义在服务端 ClientHeaders,客户端改了必须同步改那边。
2. 我们不收集什么
| 类别 | 说明 |
|---|---|
| 硬件标识 | 不采集 IMEI / MEID / OAID / MAC / Android ID,设备 ID 是随机 UUID |
| 位置 | 不申请定位权限,不采集 |
| 通讯录 / 短信 / 通话记录 | 不申请,不采集 |
| 相册 / 媒体库 | 只在你要上传头像 / 封面时读取你主动选择的那一张,不扫描、不上传整个相册 |
| 剪切板 | 不读取 |
| 播放历史 | 听歌统计只写在本机数据库,不上送(桌面端同样只存本地 SQLite) |
| 第三方平台账号 | 本软件与各音乐平台无任何账号关联,登录态只发给自建后端 |
登录态(token)只发给自建后端;访问第三方直链时不携带任何 token 或自定义头。
3. 权限用途(Android)
| 权限 | 用途 | 不授权会怎样 |
|---|---|---|
INTERNET | 在线搜索、试听、下载 | 在线功能全不可用(本地播放不受影响) |
POST_NOTIFICATIONS | 播放通知栏(常驻播放控制) | 没有通知栏控制,锁屏也看不到播放状态 |
READ_MEDIA_AUDIO | 扫描本地音乐库 | 本地曲库为空,需手动指定目录 |
MANAGE_EXTERNAL_STORAGE | 删除第三方公共媒体文件、写入公共下载目录 | 只能写到应用私有目录,删不掉外部文件 |
REQUEST_INSTALL_PACKAGES | 应用内更新安装 | 更新改为跳浏览器手动下载安装 |
FOREGROUND_SERVICE / FOREGROUND_SERVICE_MEDIA_PLAYBACK | 后台播放保活 | 切后台后播放可能被系统回收 |
WAKE_LOCK | 播放时防止休眠 | 息屏播放可能中断 |
SYSTEM_ALERT_WINDOW | 桌面歌词悬浮窗 | 桌面歌词不可用 |
WRITE_EXTERNAL_STORAGE(≤ Android 9) | 旧版本写入存储 | 旧系统上下载失败 |
这些都是可选能力,不是前置条件。 拒绝任何一个,本地播放依然可用—— 只是对应功能(如桌面歌词、下载)不可用。 MANAGE_EXTERNAL_STORAGE 只在你要删除第三方媒体文件时才需要。
为什么要放行明文流量(http)
第三方音源接口与封面图有相当一部分还是 http://。Android 9 起默认禁止明文流量, 不放行会直接报 CLEARTEXT communication not permitted。因此应用声明了 android:usesCleartextTraffic="true"。这只影响能否访问 http 地址,不改变上面 任何一条「收集什么 / 不收集什么」的结论。
4. 数据存在哪里
- 本地数据(播放缓存、听歌统计、歌单缓存、设置):只存在设备上。 Android 在应用私有目录,Windows 在
%APPDATA%\QuietMusic - 账号数据(收藏、歌单、反馈、签到):存在自建后端服务器
- 音源包:下载后存在设备本地,内容由提供方负责
Windows 端的数据根目录是 %APPDATA%\QuietMusic(数据库在 data/music.db, 音源包在 source-bundle/)。1.0.3 之前这个目录叫 LightListen,新版本首次启动时 会整目录改名迁移过来,曲库、收藏、播放历史与已装音源包都会保留; 万一改名失败(比如目录被占用),程序会继续使用旧目录而不是新建一个空目录—— 宁可不迁移,也不会让你看起来像数据没了。
卸载应用会清除本地数据。账号数据如需删除,请通过意见反馈联系我们,或直接使用 下方的自助注销。
4.1 账号自助注销
在应用内可以凭密码自助注销账号,无需人工审核。注销的语义是 「停用 + 匿名化 + 全端下线」,一次事务完成:
| 动作 | 结果 |
|---|---|
| 账号状态 | 置为停用,理由记录为「用户自助注销」 |
| 昵称 | 改为「已注销用户」 |
| 邮箱 / 手机 / 头像 / 设备标识 | 清空 |
| 会话 | 当前设备与其他所有设备一并下线 |
注销属高危操作,必须输入登录密码确认。注销后不可自助恢复,如需恢复账号 请联系管理员解封。已注销的账号再次调用注销会返回「账号已注销」。
如果你只是想清掉本机痕迹而保留账号,用设置里的「清除本地数据」即可,那是纯本地操作。
5. 第三方
| 场景 | 说明 |
|---|---|
| 音源包 | 在线取链请求由音源包通过宿主通道发出,目标地址由音源包决定。我们不参与、不记录、不代理 |
| 崩溃 / 统计 SDK | 没有。我们不使用任何第三方统计或崩溃 SDK,统计上报到自建后端 |
| 广告 | 没有。本软件不含任何广告 SDK |
| GitHub 更新加速 | 检查更新时可能使用加速前缀(由自建后端下发),仅用于下载安装包 |
音源包能发出的请求被宿主通道限制为「取一个 URL 的字节」,包拿不到你的 token、 拿不到本机文件系统、也不能开 WebSocket 或 Worker。这条边界的具体技术细节见 音源包机制。
6. 儿童
本软件不面向儿童,也不会故意收集儿童个人信息。账号注册需要邮箱,我们不设年龄门槛, 但也不针对未成年人做任何定向处理或额外采集。
7. 政策变更
本政策可能随版本更新而调整,更新后的版本将在本页面公布。涉及采集范围扩大的变更 会同步更新本页顶部的「最后更新」日期。
8. 联系我们
- 应用内「意见反馈」
- 反馈与贡献 页列出的 GitHub / CNB 渠道
数据删除、账号恢复、隐私相关的具体问题,走上面任一渠道都可以。