# 原生缓存完成后的转发清理

2026-10-04。已修改现有 Go 和 RN 项目。runtime11 已在本地构建；业务服务、安装包和 OTA 未发布。

下载完成、失败或删除时，原生下载器通知服务器关闭该任务的 RAM 转发。无需等待 App 回到前台。普通直连下载不会发送此通知；等待 Wi-Fi 和用户暂停仍保留可恢复任务。

## 接线

| 位置 | 实现 |
| --- | --- |
| Go `consumer_offline_relay.go` | `POST /api/consumer/offline/media/<capability>/release`，空请求体、204响应；仅删除这个内存能力及其媒体上下文 |
| Android `JukuOfflineStore` | 复用 Media3 完成、失败、移除和原生索引恢复回调；`JukuOfflineRelayCleanup` 发送短请求 |
| Apple `DramivioOfflineEngine` | 复用系统下载的终态、删除和恢复记录；`DramivioOfflineRelayCleanup` 使用独立无缓存 URLSession |
| Expo `plugins/withOfflineBackground.js` | 通过官方 `withAppDelegate` 生成 iOS 后台事件转接；其他系统会话交给 Expo 原处理 |
| 原 JS 队列 | 保留已认证的 `release(orderId,assetId)`，作为前台恢复时的补充 |

完成通知从原生已验证的转发地址派生，限定同一 API、同一能力目录。它不携带网站 Cookie、登录凭据、来源头或视频，且不跟随重定向。不能凭订单编号关闭其他任务，也不能签发许可、取消订单或修改缓存文件。旧任务迟到的通知只关闭旧能力，新线路使用的新能力继续有效。

短请求超时3秒，失败最多执行两次原生自动重试。重复通知、已过期能力和服务器重启后的旧能力均返回204。恢复时已有终态索引/记录可再次通知；没有增加业务表、登录系统或另一套视频队列。

## 测试

| 范围 | 结果与覆盖 |
| --- | --- |
| RN App | 历史终态阶段359/359；当前全量371/371，类型检查通过；新增 Expo 生成、重复生成和保留其他回调检查 |
| Android Media3 | 40/40；实际下载索引与文件缓存，终态通知、移除、失败、重启、Wi-Fi等待；真实本地HTTP空POST、去重及302不跟随 |
| Apple SDK | 193/193；实际 Foundation/AVFoundation 文件与策略；新增 URLSession 通知、无凭据、去重与503重试夹具 |
| Go race | 本轮离线相关12项通过，2个需要外部联合夹具的入口跳过；这些入口不计通过 |
| 公开 API 联调 | 实际 Go、Better Auth 邮箱登录与隔离 RAM PostgreSQL；直连准备、同许可转发、无凭据释放、重复/迟到通知、新线路Range播放与数据库状态检查通过 |
| 保存的播放器补丁 | 在原版 react-native-video 6.19.2 上干净应用；23个源码文件与实际编译源码一致，无构建文件混入 |
| 构建 | 当前 Go、runtime11 Android ARM64测试APK、iOS Hermes导出和iOS原生项目生成通过 |

实际联调最终：转发会话0、视频RAM0、转换任务0；同一集扣次1，资产仍为ready，原许可及到期时间不变。邮箱、安装批准和视频使用明确测试夹具；没有联系真实来源或发送邮件。此前 runtime8 三集加密缓存的模拟器验收保留为历史证据，本轮 runtime11 APK 已完成 Android36 首次注册设备和 CENC 三集播放验收；转发终态释放结果沿用此页明确的隔离联调记录。

## 尚需完成

剩余尚未进入原生下载器的选集仍由前台 JS 调度。系统强退、进程被杀或断网时，无法保证通知立即送达；服务器已有最多30分钟的能力期限和上下文关闭作为最终回收。完整 iOS 构建、AppDelegate 与系统后台唤醒的真机验收仍待完成。通知的 Apple URLSession 测试使用协议夹具，不能替代 iOS 后台执行验收。

本轮由主 Agent 复核，没有新增独立子 Agent 结论。复核覆盖了旧通知与新线路隔离、重复通知、原生终态回调、Expo生成的宿主转接，以及切换账号时尚未入队的HLS准备会话清理。

[测试记录](dramivio-native-release-validation.json) · [当前开发状态](dramivio-development-status.md) · [缓存直连与转发](dramivio-offline-relay-development.md)

复用依据：[Android Media3 下载](https://developer.android.com/media/media3/exoplayer/downloading-media)、[Expo 配置插件](https://docs.expo.dev/config-plugins/plugins/)。
