你的音乐,你的网络,你的数据。
Serento 是一款本地优先的应用,浏览你自己的 UPnP 音乐服务器,播放到你网络中的渲染器。我们不运营盯着你听歌的服务器,不出售数据,也没有账号体系。本页列出离开你设备的每一个字节,以及它们的去向。
01 我们是谁
Serento 由注册于罗马尼亚布加勒斯特的 Dusty Enterprise SRL 发行。就欧盟数据保护法(GDPR)而言,对于 Serento 处理的任何与你有关的信息,Dusty Enterprise SRL 是数据控制者。任何隐私问题或请求都可以联系我们:contact@serento.app,你的法定权利见第 11 条。
02 Serento 是什么,不是什么
Serento 是一个 UPnP / OpenHome 控制点。它运行在你的 iPhone 或 iPad 上,在本地网络中找到你的音乐服务器和渲染器,向它们索取目录,再告诉渲染器播放什么。音频数据从你的服务器(或你收听的电台)直达渲染器,从不经过 Serento,也不经过任何由我们运营的基础设施。
- 没有账号。 没有注册页面,不要邮箱,不要密码,也没有「用 Apple / Google 登录」。Serento 没有用户数据库,因为在那个意义上根本不存在用户,只有在自己 iOS 设备上运行这款应用的人。
- 没有中心化目录。 我们没有你音乐库的副本,不为你的音乐建索引,也不向你推荐曲目。浏览和搜索都是实时读取你自己的 UPnP 服务器。
- 没有第三方追踪 SDK。 我们不集成分析 SDK(没有 Firebase、没有 Google Analytics、没有 Mixpanel、没有 Amplitude、没有 PostHog),不集成归因 SDK(没有 AppsFlyer、没有 Branch、没有 Adjust),也不集成广告 SDK 或社交网络 SDK。但我们确实会收集自家的、严格匿名的第一方遥测数据,见下面第 02a 条。
- 不追踪你本人。 我们的遥测后端从不记录你的 IP 地址、你音乐库的内容(没有曲目 / 专辑 / 艺人名称,没有文件路径)、你的播放历史,或你的搜索词。它只收到匿名的数量与百分比,无法关联到任何身份。
02a 匿名遥测(我们确实会收集的部分)
为了解哪些设备和系统版本在使用中、大家搭配的是哪些渲染器,以及最重要的一点:实际用户的音乐元数据完整到什么程度(好让我们判断要不要做更好的元数据工具),应用会向我们发送一份很小的报告。它不含个人数据,永远不会暴露你是谁或你音乐库里有什么。这是使用 Serento 的条件,已在此处和服务条款中披露;没有按用户关闭的选项。具体包括:
- 一个匿名安装 id。 应用在首次启动时生成的随机标识符。它不是你的 Apple ID,不是硬件 id,也不由任何与你有关的信息推导而来。重装会生成一个全新的。它只能让我们看出两份报告来自同一次安装。
- 一把单向的「家庭」密钥,用于把你自己的设备归到一起。 为了看出某个人同时用着 iPhone 和 Mac(而不是把他们算成两个陌生人),应用会对你的 iCloud 账户标识符做一次单向哈希,只发送这串哈希值。我们从不接收你的 iCloud 账户、Apple ID、姓名或邮箱,哈希也无法反推回去。它是一把假名化的密钥:只是稳定地把一个(匿名的)人和另一个人区分开,好让我们把他们的设备归组,仅此而已。如果你不想被归组,单靠安装 id 本身已经是匿名的,家庭密钥只是额外提供跨设备归组的能力。
- 粗粒度的设备信息与应用使用情况。 平台(iPhone / iPad / Mac)、设备型号标识、系统名称与版本、应用版本与构建号、内存总量 / 可用量、你的两位地区代码(取自设备语言区域设置,绝不取自 IP,我们从不存储 IP),以及应用被使用了多久(会话时长,以秒计)。
- 渲染器及其能力。 你所用网络播放器的厂商和型号,以及它只支持 DLNA、还是支持 OpenHome 和软件音量控制。这些都是硬件能力,绝不包括你给设备起的名字。
- 音乐库构成,只有数量。 你的服务器里有多少曲目 / 专辑 / 艺人,多少文件是 DSD、多少是 PCM,按格式(FLAC、ALAC、DSD、MP3 等)和解析度的分布,以及我们最在意的那部分:你的曲目中有多大比例填写了各个标签字段(标题、艺人、专辑、流派、年份等)。只有数量和百分比,绝不包含你音乐的名称或内容。
我们不会、也无法据此还原你的音乐库或你的身份。我们绝不出售这些数据。原始报告在 13 个月后删除。
03 留在你设备上的内容
以下内容在你的 iPhone 或 iPad 上创建并本地存储。除第 04 条(iCloud 同步)或第 06 条(你主动选择发送的诊断日志)明确说明的情况外,它们都不会离开设备:
- 音乐库缓存。 当你连接一台 UPnP 服务器(MinimServer、Plex、Twonky、Asset、JRiver 等)时,我们会取回专辑 / 艺人 / 曲目名称、时长、编码格式、采样率、文件路径和封面,写入位于应用沙盒内的 SwiftData 存储。它们只由设备上的 Serento 读取,且只在应用运行时读取。
- 应用偏好设置。 主题、默认队列方式、无缝播放开关、静默网络延时、字母索引条开关、音量控制开关、专辑版本归并配置,以及上次选择的渲染器 / 服务器 / 音乐库 / 标签页。存放在 iOS UserDefaults 中。
- 设备发现缓存。 Serento 在你本地网络中见过的 UPnP 服务器和渲染器,包括 IP 地址、友好名称、UDN 和支持的服务。用于在选择器中直接列出它们,而不必每次启动都重跑一遍完整的 SSDP 扫描。删除应用即清除。
- 最近搜索。 你在 Search 标签页中输入的最近几条搜索词,用于填充「Recent」板块。可通过 Search 中的 Clear 按钮清除。
- Plex 认证令牌。 如果你用 Plex 账户登录,Plex API 会返回一个访问令牌。Serento 将它存入 iOS 钥匙串(受设备密码 / Face ID / Touch ID 保护)。令牌只由 Serento 读取,绝不会发送给 Dusty Enterprise SRL。
- 诊断日志文件。 一份滚动记录的日志,涵盖 UPnP 发现过程、播放状态切换、渲染器响应和错误情况,存放在应用沙盒内。除非你自己在设置中点按「Send Logs to Developer」,否则绝不外传(见第 06 条)。
04 通过 Apple iCloud 在你自己设备之间同步的内容
Serento 使用 Apple 的 CloudKit,在登录同一个 Apple ID 的 iOS 设备之间同步一小部分个人整理数据。这些数据存放在你自己的私人 iCloud 容器中,按 Apple 的文档保证,连 Apple 员工也无法读取;Dusty Enterprise SRL 同样没有服务端访问权限(我们只在设备上读写,从不经由任何后端)。同步的内容包括:
- 收藏。 你收藏的曲目、专辑、艺人和电台。
- 播放列表。 你在 Serento 中创建的播放列表名称与曲目清单。
- 标签与书签。 你创建的标签、被标记的条目,以及你保存的书签。
- 稍后聆听清单。 你加入 Listen Later 的条目。
- 自定义电台。 你添加的电台(名称 + 流地址 + 编码格式提示)。
- 专辑与曲目评分。 你打出的 1–5 星。
- 试用 / 订阅状态。 一条防滥用记录,用于判断你的 Apple ID 是否已经用过 14 天免费试用。存放在你的私人 CloudKit 容器中,启动时在本地校验。
05 Serento 产生的网络流量
Serento 从你设备发出的每一条连接。除此之外没有别的。
- 你的本地网络 · UPnP 发现。 用 SSDP 组播探测(UDP 1900)寻找 UPnP 服务器和渲染器,用 Plex 的 GDM(UDP 单播)寻找 Plex Media Server,在发布 Bonjour mDNS 的网络上用它寻找 Plex。全部限于你的局域网内。
- 你的本地网络 · 控制。 向你的 UPnP 服务器(ContentDirectory)和渲染器(AVTransport,OpenHome 的 Playlist / Product / Volume / Info,RenderingControl)发出的 HTTP / SOAP 请求,用于浏览音乐库和驱动播放。
- 你的本地网络 · 音频流。 当你按下播放,Serento 把所选曲目的流地址告诉渲染器,渲染器直接从你的服务器取回音频。数据不经过 Serento,也不经过任何由我们运营的基础设施。
- Apple iCloud / CloudKit。 第 04 条所列数据的同步流量。这些流量发往 Apple 在你 Apple ID 名下的服务器,这一段由 Apple 的隐私政策约束。
- Apple App Store / StoreKit。 用于订阅验证、恢复购买,以及试用 / 终身权益校验。由 iOS 的 StoreKit 框架处理,适用 Apple 的隐私政策。
- plex.tv(仅 Plex 用户)。 如果你用 Plex 登录,Serento 会与 plex.tv 通信完成认证并查找你可访问的 Plex 服务器。这一段适用 Plex Inc. 的隐私政策。如果你不用 Plex,就不会有任何 plex.tv 流量。
- 网络电台流。 当你播放某个电台时,你的设备直接从广播方的 URL 取回音频。我们看不到你在播什么。广播方能看到你的 IP。
- serento.app。 向我们的官网检查软件更新,以及第 02a 条所述的匿名遥测 POST(只有数量和百分比;我们这边不存储任何 IP)。
- Resend(仅在你点按「Send Logs」时)。 当你在设置中明确点按「Send Logs to Developer」,诊断日志文件会通过 Resend 的事务性邮件 API 发送到 contact@serento.app。见第 06 条。
06 诊断日志(何时发送由你决定)
诊断日志帮助我们复现播放问题、发现失败,以及我们无从得知的渲染器怪癖。它以行为方式选择加入:除非你在设置中点按「Send Logs to Developer」按钮,否则不会有任何东西离开你的设备。
- 日志包含什么。 时间戳,以及这些结构化记录:UPnP 发现结果(服务器 / 渲染器名称、IP、UDN、支持的服务)、播放事件(曲目开始、暂停、切换、出错)、渲染器返回的 SOAP 响应(HTTP 状态码、SOAP 故障码)、音量变化、音乐库同步进度、应用版本与构建号、iOS 版本、设备型号、内存档位、语言区域设置。
- 日志不包含什么。 我们刻意排除:你的 Apple ID、你的邮箱、你的真实姓名、你的位置、你的通讯录、你的音频内容、你的 Plex 令牌(已脱敏)、你的密码,以及任何来自其他应用的内容。
- 它去往哪里。 日志被封装成一封邮件,经 Resend 事务性邮件服务发送到 contact@serento.app。Resend(resend.com)作为欧盟 GDPR 第 28 条下的数据处理者,代表我们处理这封邮件。
- 我们保留多久。 日志在我们的收件箱中保留到该支持案例结束(通常是几天,遇到棘手的渲染器问题偶尔会是几周),随后删除。我们不做长期归档。
- 发送频率限制。 两次发送之间有一段短暂冷却,避免同一台设备意外把我们的收件箱刷爆。
07 崩溃报告
如果 Serento 崩溃,崩溃堆栈完全由 Apple 的系统机制处理。我们不集成任何第三方崩溃 SDK。如果你在 iOS 中启用了 Settings → Privacy & Security → Analytics & Improvements → Share with App Developers,我们会经由 App Store Connect 收到一份匿名化的堆栈信息,不附带任何个人数据。如果你关闭了这项设置,我们什么也收不到。
08 我们依赖的第三方服务
交付 Serento 只涉及以下第三方。每一方都有自己的隐私政策,如果你在意它们如何处理各自那一段数据流,建议读一读:
- Apple Inc. App Store 分发、iCloud / CloudKit 同步、StoreKit 计费、崩溃报告。apple.com/legal/privacy
- Plex Inc. 仅在你拥有 Plex 服务器并用 Plex 账户登录时相关。plex.tv/about/privacy-legal/privacy-policy
- Resend。 用于投递你主动选择发送的诊断日志的邮件服务。resend.com/legal/privacy-policy
- 你的 UPnP 服务器厂商。 你在自己网络中运行的任何服务器(MinimServer、Plex、Asset UPnP、Twonky、JRiver Media Center、Kodi UPnP 等)都受其各自的许可与隐私条款约束。Serento 看不到它们做了什么。
- 网络电台广播方。 当你播放某个电台时,你是直接连接到它的服务器。广播方能看到你的 IP,并受其自身条款约束。
09 我们没有的东西
与上面的清单对称,因为「没有什么」和「有什么」同样重要:
- 没有用户数据库。 我们没有任何关于谁在运行 Serento 的记录。我们说不出「活跃用户」有多少,因为我们根本没有这个数字。
- 没有 IP 地址日志。 我们没有任何会记录你 IP 地址的后端。当你的流量触及 iCloud 或 App Store 时 Apple 会看到,但那是 Apple 与你之间的关系,与我们无关。
- 没有收听历史。 你播了什么、什么时候播、播了多少次,这些都不会传到我们这里。它们只存在于你的设备上,以及(对于第 04 条中的整理数据)你的私人 iCloud 容器中。
- 无法访问内容。 我们看不到你音乐库中的专辑名、艺人名或任何其他元数据。你的服务器是直接把它们发给你的设备的。
- 没有位置数据。 我们不索取、不请求、也不使用你的设备位置。
- 不碰通讯录、日历、照片和麦克风。 Serento 从不请求这些权限。完整权限清单可在 iOS Settings → Serento 中查看。
10 儿童
Serento 并非面向 13 周岁以下儿童,我们也不会在知情的情况下处理 13 周岁以下未成年人的个人数据。如果你认为有儿童以某种方式向我们提供了个人数据,请联系 contact@serento.app,我们会删除。
11 你在 GDPR 下的权利
由于 Dusty Enterprise SRL 设立于欧盟境内,欧盟《通用数据保护条例》(2016/679 号条例)适用于我们处理的任何与你有关的个人数据。你的法定权利包括:
- 访问权(第 15 条)。 询问我们持有你哪些个人数据,并索取一份副本。
- 更正权(第 16 条)。 要求我们更正不准确的个人数据。
- 删除权(第 17 条)。 要求我们删除你的个人数据,通常就是你此前发送过的诊断日志,因为那实际上是我们唯一可能持有内容的地方。
- 限制处理权(第 18 条)。 在特定情形下要求我们限制对你数据的处理。
- 数据可携权(第 20 条)。 以结构化、机器可读的格式取得你的数据。
- 反对权(第 21 条)。 就基于正当利益的处理提出反对。
- 投诉权。 向你所在国的监管机构投诉,在罗马尼亚是 ANSPDCP(dataprotection.ro)。你也可以向你居住国的监管机构投诉。
12 数据保留
因为我们持有的东西极少,保留期也很短:
- 设备本地数据。 只要应用还装着就一直存在。卸载应用即全部抹除(见第 03 条)。
- 经 iCloud 同步的数据。 只要你的 Apple ID 还保有这些数据就一直存在,适用 Apple 的标准 iCloud 保留规则。你可以在应用内删除条目,或退出 iCloud 来清除。
- 你发送过的诊断日志。 在我们的收件箱中保留到该支持案例结束,随后删除(通常是几天,偶尔几周)。
- 订阅与账务记录。 由 Apple 按其政策持有;Dusty Enterprise SRL 只收到一份匿名化的收款汇总。
13 跨境传输
Dusty Enterprise SRL 在罗马尼亚(欧盟)运营。第 08 条列出的第三方会在欧盟境外处理部分数据(Apple 使用全球基础设施,Plex 位于加利福尼亚,Resend 在美国运营)。这些供应商均按 GDPR 的要求,为欧盟向第三国的传输实施了标准合同条款或同等机制。如果你想了解其中某一方的具体情况,请联系我们。
14 安全
你设备上的本地数据受 iOS 沙盒保护,钥匙串中的条目(尤其是你的 Plex 令牌)另受设备密码与生物识别保护。CloudKit 数据由 Apple 加密传输,并存放在你的私人容器中。诊断日志经 HTTPS 传输至 Resend。我们不运营任何其他持有你个人数据的服务器,因此除你的设备与 Apple iCloud 之外,攻击面实际上就只剩 contact@serento.app 这个 Resend 邮箱。
15 本政策的变更
当法律文本发生实质变化时,我们会更新本页顶部的生效日期;如果变化影响到我们收集哪些数据或数据流向何处,还会在应用内给出提示。最新版本始终是你在 Settings → About Serento → Privacy Policy 中看到的那一版。
16 联系我们
任何问题、请求、投诉或权利行使:contact@serento.app。我们会按 GDPR 的要求在 30 天内答复,通常快得多。