激励视频奖励结算
胜利时基础奖励 10 螺丝随结算入账,并解锁下一关。页面另有「看完广告,再得 10 螺丝」按钮。玩家随时可以继续游戏。示例金额用于练习结算设计。
状态与玩家反馈
| 状态 | 输入 | 可见结果与数据动作 |
|---|---|---|
| 可领取 | 点击广告按钮 | 生成本次 attemptId,显示加载,锁住广告按钮防止连点 |
| 加载或播放 | 无广告、加载失败、提前关闭 | 解释本次未获奖励,允许在结算页重新发起 |
| 播放中 | 确认本次完整播放 | 持久化待发记录,提交一次额外奖励,页面显示「确认奖励中」 |
| 待发 | 请求超时、断线或冷启动 | 先按幂等键查账,必要时使用原键重试。保留可继续游戏的入口 |
| 已发 | 结算重开、重复回调或重复请求 | 展示已领取,从账本读取余额,奖励总额保持原值 |
| 播放中被回收 | 冷启动,且无可恢复的完整播放凭据 | 提示这次播放未能确认。已入账则展示已领取,否则可重新申请 |
微信适配层需按实际基础库确认完整播放的信号。只有能关联到正在处理的 attemptId 且明确完整播放的结果才进入待发。广告开始展示、收到未知状态、缺少完成证明或旧回调到达,都不进入发奖。适配层无法可靠关联时保留未确认状态。接入真实服务时依据该广告能力可用的校验凭据核验玩家、本次展示与胜利场次。
账本合同
- 基础奖励键为
runId:base,广告奖励键为runId:ad_bonus。attemptId 区分每次展示,发奖上限按 runId 判定。 - 账本按玩家与幂等键唯一。发放条目和余额变更在同一事务,重复请求返回既有记录。通关标记和基础奖励都以该局结算为依据。
- 失败场次不开放奖励广告。发奖时再校验结算属于当前玩家且为胜利。先确认已有账本,再决定需不需要提交额外奖励。
- 保存待发记录后才发送网络请求。请求已经入账但响应丢失时,页面通过查询或重试重新对齐。广告页面结束后余额仍能从账本恢复。
可直接交给 AI 的需求
将本页的规则和验收表与下面的指令一起发给 AI。
按本页实现胜利结算奖励。基础 +10,确认完整播放后额外 +10。
广告只能由玩家点击发起,继续游戏入口保持可用。区分 runId、
attemptId 与幂等键,播放事件、待发记录和账本使用各自的状态。
把广告适配器和奖励仓库做成可以注入的接入点,先用模拟器重放下面用例,
再按微信小游戏官方文档在目标基础库验证回调与失败分支。
验收用例
以下用例各自从胜利局基础奖励已发、余额 10 螺丝开始,失败场次除外。
| 编号 | 给定 | 当 | 则 |
|---|---|---|---|
| A01 | 结算页允许申请 | 快速点击两次并在半途关掉广告 | 只创建一次展示,余额 10,继续入口可用 |
| A02 | 当次展示完整播放 | 相同回调和发奖请求各重放两次 | 余额 20,额外奖励条目恰好一条 |
| A03 | 服务端入账,客户端等响应时断网 | 冷启动后恢复待发记录并重试 | 同一个 runId 的键返回已有奖励,余额仍为 20 |
| A04 | 当前尝试是 B,旧尝试 A 的回调延迟到达 | 接收 A 的完成回调 | B 保持原状态,额外奖励账本无新增 |
| A05 | 广告无填充或无法确认播放结果 | 返回结算页 | 展示可理解的状态,余额 10,可以直接继续 |
| A06 | 对局失败 | 打开结算并尝试提交广告奖励 | 页面无激励入口,账本拒绝该场次的额外奖励 |