视觉按最新原型,业务按已确认PRD。现有代码为满足设计而改造。执行见按设计实施与任务卡;当前代码与验证范围见消费者功能页。
App 邀请功能交接
已在 juku-mobile 接入邀请页面:我的 → 邀请好友,独立的邀请总览、绑定、记录和规则页面,中英文、浅色、无阴影。当前活动参数与旧关系规则均读取后台;活动关闭仍可查看旧记录。没有固定奖励数、默认播放额度或虚构到账状态。
实际接口
| 操作 | 请求 | 结果 |
|---|---|---|
| 查询 | GET /api/consumer/referrals/summary |
当前活动、状态计数、最近邀请记录、当前绑定关系 |
| 获取邀请码 | POST /api/consumer/referrals/code {} |
ready 的邀请码及有效期,或 unavailable |
| 绑定 | POST /api/consumer/referrals/bind {code} |
扁平的 bound 关系,或明确的跳过/无奖励资格结果 |
| 申诉 | POST /api/consumer/referrals/appeal {relationId,reason} |
扁平的 appeal_open 关系 |
请求复用已有邮箱登录与 API 凭据设施。仅已验证并完成消费者身份桥接的账号可以调用,所有请求限定于配置的 API 站点。切换账号、站点或凭据后,旧返回不能写入新页面或合并旧 Cookie;读取原生凭据期间发生切换,也会在发送前阻止请求。第三方视频请求逻辑没有修改。
操作边界
- 当前记录查询成功前不开放写入;查询失败保留重试入口。
- 绑定与申诉结果不明时只查询一次记录,不自动重复提交。页面再次进入先读取记录,继续复用领域已有的唯一绑定、单关系申诉和奖励入账约束,没有增加跨页面意图存储。
- HTTP 认证拒绝显示登录提示;可能已经提交的迟到身份变化保留待确认状态。未知结果不能显示为已绑定、已到账或申诉完成。
- DTO 校验活动规则、关系状态、脱敏标签与规则快照,错误的成功响应不能冒充有效结果。申诉/审核中与拒绝状态按真实领域语义校验。
- 邀请规则、奖励数、有效期、限额、审核方式全部来自后台。历史关系使用绑定时的规则快照。
- 复制使用锁定的
expo-clipboard@57.0.2,分享使用 React NativeShare;只分享后台实际返回的邀请码。
验证
2026-10-03:全项目 148/148 测试通过,tsc --noEmit 与差异格式检查通过。新增 8 项 API + 12 项实际 React/TanStack 交互测试,覆盖身份/站点隔离、迟到响应、异步凭据读取期间退出、认证拒绝恢复、未知绑定/申诉结果、关闭活动旧记录、错误 DTO、复制和分享。
独立子 Agent 对同一邀请实现进行只读对抗检查,20 项通过,复核后没有剩余阻塞问题。这些是实际 App 模块与 React/TanStack 的协议测试,原生平台通过替身运行;不能作为真机、真实邮件或数据库联调证据。
主 Agent 验证Expo 57自动链接实际引用 expo.modules.clipboard.ClipboardModule,并离线通过 :expo:compileReleaseKotlin。Clipboard使用官方预编译AAR,未把不存在的独立源码编译任务算作通过。未构建或发布 APK/OTA。观看资格证据、设备认证签发与发奖作业尚未完成生产接入;页面不因此宣称 App 已认证或自动获得每日 50 次权益。
代码范围
新增 src/consumer/referrals.ts、src/screens/InviteScreen.tsx,修改导航、我的入口、双语词条及 src/api.ts 的四接口薄适配;新增邀请 API/React 回归测试。没有修改后端、后台、Web 或播放器传输算法。