Beta 内购全免费但测试结束不延用
TestFlight 里的 App 内购买(IAP)全免费
TestFlight 环境里有一个让测试者非常开心的规则:所有 App 内购买项目(包括订阅、一次性购买、消耗型项目)都是免费的。测试者在 Beta App 里点「购买」「解锁」「订阅」按钮后,Apple 不会真的扣他们的钱——只会走一遍完整的购买流程(验证、收据回调、App 收到购买成功通知),实际不产生扣费。
这个规则存在的目的:让开发者可以在 Beta 测试期让尽可能多的人体验到付费功能,得到更全面的反馈。如果 Beta 版还要让测试者花钱买内购,很多人就不愿意测了。
对开发者的好处
- 收集到更多真实付费流程的反馈:如果 Beta 版里内购也免费,测试者会更愿意点「购买」去测付费功能——你能看到更多内购界面、收据验证、解锁流程的真实数据。
- 验证内购解锁逻辑:测试者点「购买」后 App 能不能正确解锁付费功能?收据验证逻辑能不能正确处理?TestFlight 给了一个无成本验证的机会。
- 收集到更多内购崩溃:内购流程也是容易崩溃的地方——沙盒 + TestFlight 让更多人跑到付费代码路径上。
测试者体验
测试者在 TestFlight 里的内购体验是:
- 在 Beta App 里点付费功能 → 弹出购买确认(和 App Store 正式版一样的界面)。
- 点「购买」→ 可能需要 Face ID / Touch ID / 密码确认。
- Apple 走完整购买流程 → 显示「购买成功」。
- 不扣费——测试者事后看 Apple ID 账单,不会有这笔消费。
- Beta App 正确解锁付费功能。
内购不延用:开发者必须知道的坑
测试期内的 App 内购买记录,在 Beta 测试结束后不会自动转移到 App Store 正式版。这是 Apple 的硬性规定,也是 Beta 测试里最容易产生预期偏差的点。
具体表现:
- 测试者在 TestFlight 里花「免费钱」解锁了 Beta App 的 Pro 版 → 测试期结束 → App Store 正式版发布 → 测试者下载正式版 → 发现 Pro 版没解锁,需要重新付费。
- 测试者会不满:「我明明付过钱了!」——实际上在 TestFlight 里没真扣过钱。
- 开发者收到客诉:解释起来很麻烦。
怎么降低客诉
- 在 Beta App Description 里提前说清楚:加一条:「测试期内的 App 内购买是免费的,且测试期结束后不会自动转移到 App Store 正式版。若您希望在正式版中继续使用,请在正式版上架后重新购买。」
- 测试期结束时给核心测试者发优惠券:对帮你测了很久的测试者,在正式版上架后给他们发一个免费兑换码或折扣码,让他们重新付费时享受优惠。
- 正式版上架后做一次定向召回:给参与过 Beta 测试的核心用户发邮件通知正式版上线、给出购买优惠。
App 内购买测试的注意事项
- 消耗型项目会被重置:测试者买了消耗型内购(比如游戏里的金币、体力)→ 消费掉 → 在 TestFlight 里还能再买(但还是免费)。这个行为和正式版一样,但测试者不会真的花钱。
- 非消耗型项目不会真的锁定:测试者买了「永久 Pro」→ 测试期结束 → 正式版里「永久 Pro」不存在了——需要重新购买。
- 收据验证要处理好 TestFlight 环境:开发者在做收据验证时,要区分 TestFlight 环境的收据和正式 App Store 的收据——两者在 App 协议上有标记。不要把 TestFlight 收据当成正式版收据存入你的后端数据库。
Apple Sandbox 账户 vs TestFlight 免费内购
App Store Sandbox(沙盒)和 TestFlight 都提供免费内购能力。区别在于:
- Sandbox 需要开发者手动创建 Sandbox 测试账户、测试者用这个账户单独登录设备 → 只能测沙盒模式。
- TestFlight 自动覆盖所有 Beta 测试者 → 任何接受邀请的人在 Beta App 里的内购都是免费的,不需要额外配置。
对于独立开发者来说,TestFlight 的免费内购已经足够覆盖 99% 的测试场景——Sandbox 账户只在你需要更精细的模拟(比如模拟不同国家的价格、模拟账单失败重试)时才用得上。