ByteNoteByteNote
tvOS 短剧客户端架构决策:解密放在哪里最安全
字

字节笔记本

2026年11月4日 · 约 3 分钟读完

tvOS 短剧客户端架构决策:解密放在哪里最安全

API中转
¥120

给 Apple TV 做短剧客户端,最棘手的不是写界面,是决定解密放在哪里。这个问题的答案决定了整个架构是「客户端自带后端」还是「客户端只做壳、后端跑在服务器上」,两种方案的安全性、维护成本和用户体验完全不同。

一、架构选择:后端分离

短剧客户端的业务逻辑可以用 Go 写成一个独立后端服务,负责搜索、推荐、分类、排行榜、剧集详情、历史、收藏及账号等非媒体功能。Apple TV 客户端只保留 SwiftUI 界面和 AVPlayer 播放器,通过 REST API 访问后端。

推荐做法是把项目拆成两个模块:hongguo-backend 负责数据、账号和播放授权校验,hongguo-tvos 是 SwiftUI 原生客户端。这样后端可以单独升级部署,Apple TV 不用每次重新打包,也能为以后多终端统一账号和观看历史打基础。

二、播放安全边界

受保护媒体的解密和代理链路不应该搬到服务器。此前 tvOS 对播放接口的限制应继续保留。如果要把受保护媒体解密后的播放地址提供给 Apple TV,本质上仍然是同一条未经授权的受保护媒体流。

合法播放方式优先:AVPlayer 播放有明确授权的媒体地址,MPVKit 处理 AVPlayer 不支持的格式。涉及加密媒体时,只使用具备合法访问权限和有效授权的播放方式。

三、SwiftUI 界面

界面用 SwiftUI 写,整体延续已有的 Mac 风格布局,但需要针对 tvOS Focus Engine 重新实现交互。

页面需要覆盖推荐、找剧、排行榜、上新日历、详情、播放、历史、收藏和账号设置。遥控器交互要求焦点合理:方向键切换卡片和导航,确认键进页面或执行操作,Back 键返回上一层,播放暂停键控制播放器。

列表滚动追加时不提前解析媒体,推荐剩余少量内容时才加载数据,避免一次性创建全部卡片。播放返回原卡片时保留滚动位置。上新日历支持日期切换和预约状态切换。

四、AVPlayer 播放器

tvOS 原生 AVPlayer 支持 HLS 流媒体和系统级解码,是 tvOS 上的首选方案。对原项目不直接支持的格式,可以评估 MPVKit 的兼容性。播放器需要实现播放、暂停、快进快退、进度拖动、倍速、清晰度切换、自动下一集、切集保留状态、失败重试和音视频同步。

退出播放页面时释放视频资源,避免内存泄漏。性能方面需要首页图片异步加载、列表懒加载、限制图片缓存、只创建一个活跃播放器、不预先解析所有剧集视频、非当前视频停止解码、进入后台保存播放进度、避免后端阻塞主线程、避免播放器反复初始化,并支持内存压力下清理缓存。

五、账号与数据

账号系统支持手机扫码登录、验证码登录、登录状态恢复、历史同步、收藏同步、点赞同步和观看进度同步。离线操作队列保证断网时操作不丢失。凭据保存在 Keychain 或其他符合 tvOS 安全要求的存储中,播放历史和收藏持久化到 Application Support,不依赖可能被系统清理的 Caches。

六、构建与安装

构建需要完整 Xcode 工程、tvOS 依赖配置、Go Core 静态链接构建脚本、真机 arm64 构建、模拟器构建、签名配置说明、IPA 导出脚本和 GitHub Actions 编译工作流。优先完成真实 Apple TV 可安装的开发签名版本;如果没有签名证书,仍需交付可编译工程并说明剩余步骤。

必须在真实 Apple TV 上验证安装启动、首页展示、搜索分类、播放首帧、暂停快进切集、遥控器导航、观看历史持久化和重新打开继续观看。模拟器结果不能替代真机验证。

来源:Apple tvOS 开发文档(developer.apple.com/tvos);App Review Guidelines。

相关文章

分享: