功能验收
每次交付写清已测试、未测试、不适用;没有真实设备或供应商时保留未验证项,不能把本地 mock 当成线上成功。
环境区分
| 环境 | 可证明 | 不能证明 |
|---|---|---|
| 编辑器/本地普通 HTTP | GDScript 可解析、游戏入口/资源运行、无平台时明确失败 | 真实平台身份、扣款和广告 |
| 隔离夹具 | 失败分支、重试去重、字段处理、事件顺序 | 线上配置和供应商填充 |
| 平台预览 | 平台界面、模拟商品及登录返回 | 真钱交易、正式持久库存;模拟权益可能刷新重置 |
| 经授权的正式测试 | 实际交易/消费/广告及账号恢复 | 未测试设备或任意攻击场景全部安全 |
登录与账号
游客进入;点购买触发登录;取消不购买;成功继续原购买;登录返回正确作品;A 切 B 时不显示 A 的库存和档案;账号资料空值及中文正常。桌面浏览器、手机浏览器、微信、QQ 分别记录。
商品与权益
| 场景 | 期望 |
|---|---|
| 只购买消耗品,未使用就刷新 | 正式库存保留,不自动消费、不要求重复购买 |
| 只消耗已有库存 | 成功扣一次,返回 consumptionId;不创建购买 |
| 购买并使用且已有库存 | 直接消费,无新订单 |
| 购买并使用且无库存 | 登录/确认购买 → 入库 → 消费;两步成功才允许付费动作 |
| 登录取消、购买取消或余额不足 | 不发新权益、不执行付费动作 |
| 购买成功但消费失败 | 明确已购买/使用未完成,保留库存或核实未知结果 |
| 消费已成功但响应丢失,再刷新重试 | 原 requestId 恢复同一回执;不重买、不再扣一次 |
| 相同 requestId 换商品/数量 | 服务端拒绝,不按新参数执行 |
| 多次点击、并发或切账号 | 无串号、无负库存;游戏成功效果不重复应用 |
| 永久权益已拥有 | 从服务端恢复,不依赖本地布尔值 |
仅有消费账本成功还不足以证明游戏恢复完整:模拟消费后、玩法启动前关闭页面,确认能恢复同一动作;否则报告该缺口。
广告、排行榜和存档
广告:未开通、无填充、取消、失败均不发奖;真实完成返回有效凭据;重复回调/领取不多奖;账号切换/刷新/存档冲突不串奖。
排行榜:只绑定真实结算;同一冻结 run 重试不重复;非法数据失败;世界/省/市、空榜、分页、中文昵称;自绘和平台 UI 对应同一个 boardKey。
存档:空档、旧档、新档、两个标签冲突、超限、断网;游客/预览/账号分开;账号切换先 load;旧版本未知 schema 不覆盖。
界面与资源
模态框 pause/resume 恢复原暂停和音量;按钮 loading 不跳布局、失败可恢复;窄屏不溢出;长商品名/昵称有换行和字体。冷启动、热启动与刷新分别记录资源字节、次数、耗时,不重复下载已缓存的大文件;见运行验收与资源访问。
更新和兼容性
保留同一游戏 ZIP 哈希,验证平台运行时升级/回滚后原能力仍能使用;旧插件+新平台通过原协议;新插件面对未公布能力明确失败。SDK 新增包装器不删除旧 request 或改变字段。记录版本、证据和限制;无法证明兼容时暂停受影响发布,交负责开发者判断。
交付证据
给出每项操作的准确入口、环境/版本、输入、预期、实际、时间和业务编号;截图脱敏。附上配置交接单,把平台待配置、游戏待修改和创作者待回答分开,不能只写“全部接好了”。