文章

使用 Xcode 和沙盒在开发过程中的各个阶段进行测试

通过在整个开发过程中测试代码来验证您的 App 内购买项目的实现。

概览

使用 Xcode 和沙盒中的 Apple 测试环境,对您利用 StoreKit 框架实施的 App 内购买项目进行测试。全面的测试有助于您实现以下目标:

  • 确保流畅的购买流程,在 app 中提供积极的客户体验。

  • 实施充分的逻辑来覆盖所有场景,如购买、恢复和使用订阅优惠。

  • 验证 app 在 App Store 上架后,购买项目在生产环境中是否具有正确的行为。

在早期开发阶段中通过 beta 测试来测试 App 内购买项目时,您需要以下工具:

Xcode 中的 StoreKit 测试功能

适用于早期开发、持续集成和调试。

沙盒技术

适用于利用您在 App Store Connect 中设置的数据的测试场景。要开始测试,请参阅“创建沙盒测试员帐户”。

TestFlight

适用于管理通过内部和外部测试员进行的 beta 测试。有关更多信息,请参阅“TestFlight 让 Beta 测试更简单”。

选取相应的工具,这些工具应支持您需要的测试场景,并要求采用您已准备就绪的设置。

在开发的早期阶段,您可能尚未准备好在 App Store Connect 中配置 App 内购买项目。借助 Xcode 中的 StoreKit 测试功能,您可以在本地配置信息,从而在创建沙盒 Apple ID 之前测试 StoreKit 交易,甚至也可在没有网络连接的情况下进行测试。您可以在 Xcode 模拟器中或真实设备上测试 app。

在 App Store Connect 中设置 App 内购买项目后,就能开始使用沙盒来测试 app 在生产环境中使用的相同产品信息。在沙盒中测试时,您可以测试端到端交易以及从客户端到服务器的交易。也可以测试您的 app 可能依赖的服务器对服务器功能,例如收据验证和 App Store 服务器通知。

借助 TestFlight,您可以从团队成员或外部测试员那里获取反馈,并将沙盒环境用于 App 内购买项目。沙盒内的交易不会产生任何购买项目的费用。下表就环境设置和功能做了比较。

工具

需要 App Store Connect 设置

提供由 App Store 签名的 app 收据

在测试“购买”交易时向用户收费

Xcode 中的 StoreKit 测试功能

否 (由 Xcode 签名)

沙盒技术

TestFlight (使用沙盒)

控制测试环境

要设置和运行测试场景,您通常需要控制测试环境。例如,您可能需要重置测试帐户来重新运行几次同一测试,或者模拟用户在您的 app 外进行并影响测试条件的操作。下表显示了各项工具具备的可控制测试环境的功能。

测试场景

沙盒技术

Xcode 中的 StoreKit 测试功能

测试影响价格等级和语言区的不同商店

有限。(无价格等级)

清除购买历史记录

测试订阅升级、降级、跨级和取消自动续订

重置推介促销优惠的资格条件

引入强制 StoreKit 错误来进行测试

加快或减慢时间流速以测试订阅续期

测试常见的 StoreKit 场景

所有支持 App 内购买项目的 app 都需要支持恢复购买项目,向客户展示 App 内购买项目,以及处理基本的交易。下表列出了常见的测试场景,以及它们是不是能够在沙盒或 Xcode 中进行测试。

测试场景

沙盒技术

Xcode 中的 StoreKit 测试功能

恢复购买项目

调用 finishTransaction(_:) (英文)

购买消耗型或非消耗型 App 内购买项目

再次购买非消耗型购买项目,以进行重复测试

购买自动续期订阅产品

购买非续期订阅产品

为 App 内购买项目退款

测试中断的购买 (客户必须在 app 外完成操作)

测试付款授权失败时未能成功完成的购买尝试

从 App Store Connect 检索配置的 App 内购买项目

否 (从 StoreKit 配置文件返回数据)

测试订阅和“购买前询问”

根据 app 提供的 App 内购买项目,您可能需要对涉及自动续期订阅、推介促销优惠和“购买前询问”的场景进行测试。下表列出了这些测试场景,以及它们是不是能够在沙盒或 Xcode 中进行测试。

测试场景

沙盒技术

Xcode 中的 StoreKit 测试功能

发起导致延迟状态的“购买前询问”交易

通过批准或拒绝来解决“购买前询问”交易

兑换自动续期订阅产品的推介促销优惠

兑换自动续期订阅产品的促销优惠

处理订阅续期

处理已取消或退款的订阅

回复客户的取消订阅和停用自动续期请求

响应已到期的订阅

处理订阅升级或降级

处理具有相同或不同订阅期的订阅跨级

有关更多信息,请参阅“通过‘购买前询问’请求和进行购买”。

另请参阅

测试 App 内购买项目