沙盒测试

在 Adapty 看板和移动应用中完成所有配置后,就可以开始进行应用内购买测试了。 注意: 任何测试工具都不会向用户收取实际费用。App Store 不会针对测试环境中的购买或退款发送邮件通知。

沙盒交易不会显示在任何分析数据图表中。 它们仍会出现在各个用户画像页面和事件流中。

在进行应用内购买测试之前,请确认以下事项:

  • 已完成快速入门指南中关于商店集成、添加产品及 Adapty SDK 集成的步骤。
  • 你的产品在 App Store Connect 中已标记为 Ready to submit

沙盒测试

我们建议在真机上测试应用内购买。虽然沙盒购买可以在模拟器上运行,但要完整测试所有流程(包括支付对话框和生物识别提示),还是需要真机。

你有两种主要方式来测试应用内购买:

  • 在 Xcode 中构建并在测试设备上运行:适合开发人员和 QA 工程师。
  • 通过 TestFlight 使用沙盒测试账户:适合其他所有人。

以下指南将介绍这两种方式。

第 1 步:在 App Store Connect 中创建沙盒测试账号

请创建一个全新的沙盒测试账号,以确保购买历史是干净的。如果复用已有账号,之前购买过的产品将仍然可用,届时将无法再次测试购买流程。

只需几步即可创建新的沙盒测试账号:

  1. 在 App Store Connect 中前往 Users and Access > Sandbox > Test Accounts,然后点击 +
add-sandbox-user.webp
  1. 填写测试用户信息。请务必设置 Country or Region,因为这会影响该地区的产品可用性和购买货币。
  • 如果你使用 Gmail 或 iCloud,可以通过加号子地址复用现有邮箱地址。
  • 你也可以使用一个根本不存在的随机邮箱地址,但请确保在测试设备上登录时拒绝双因素认证(2FA)。
57c3a7c-apple_new_test_account.webp
  1. 点击 Create

第二步:启用开发者模式

如果您的测试设备已启用开发者模式,或者您没有 Mac 设备,请跳过此步骤。

您需要准备一台安装了 Xcode 的 Mac 以及测试设备的数据线:

  1. 在 Mac 上打开 Xcode。如果您打算通过 TestFlight 测试应用内购买,只需确保已安装 Xcode 即可,不需要在其中打开任何项目。
  2. 用数据线将测试设备连接到 Mac。
  3. 在测试设备上进入 Settings > Privacy & Security > Developer Mode,然后开启开发者模式

第三步:从 TestFlight 下载应用

此步骤仅适用于通过 TestFlight 进行测试的情况。如果你在 Xcode 中直接构建应用,请跳过此步骤。

有关如何将应用提交至 TestFlight 的详细信息,请参阅 Apple 文档

在下载 TestFlight 应用之前,请确保在测试设备上已使用你的正式 Apple 账号登录,然后从 TestFlight 下载要测试的应用。

下载完成后请勿打开应用,直接进行后续步骤。 如果不小心打开了,请从测试设备上删除该应用并重新下载。否则,您的购买记录可能不干净,测试应用内购时会出现错误。

第四步:切换到沙盒测试账号

不用 Mac?这里有个替代方案

如果你不在 macOS 上工作,就无法通过 Xcode 切换到沙盒账号。不过你仍然可以直接在测试设备上完成切换:

  1. 在测试设备上前往 Settings > Your Apple Account > Media & Purchases
  2. 在弹出菜单中选择 Sign Out
  3. 打开从 TestFlight 下载的应用,尝试购买一个产品。
  4. 当提示登录时,输入你的沙盒账号凭据,即可切换到沙盒环境。

切换到沙盒账户:

  1. 在测试设备上前往 Settings > Your Apple Account > Media & Purchases
  2. 从弹出菜单中选择 Sign Out
  3. 前往 Settings > Developer。如果找不到 Developer 选项,请确认你已在第 2 步中启用了它
devmode.png
  1. 向下滚动到 Sandbox Apple Account 部分,然后点击 Sign In
sandbox-acc.png
  1. 使用您的沙盒 Apple 账户凭据登录。

第 5 步:清除购买记录

如果你刚创建了一个新的沙盒测试账户并已切换到该账户,可以跳过此步骤,因为它仅适用于使用同一沙盒测试账户重复测试的情况。

  1. 在测试设备上,前往 Settings > Developer > Sandbox Apple Account
  2. 从弹出菜单中选择 Manage
  3. 进入 Account Settings,然后点击 Clear Purchase History

每次使用同一个沙盒测试账号重复测试时,都需要执行此步骤。此时,你还需要退出沙盒测试账号,然后重新登录,以清除测试设备上的购买历史缓存。

第六步:在 Xcode 中构建并运行

此步骤仅适用于使用 Xcode 构建进行测试的情况。如果你使用的是 TestFlight,请跳过此步骤。

  1. 将测试设备连接到 Mac。
  2. 打开 Xcode。
  3. 点击工具栏中的 Run,或选择 Product > Run,将应用构建并运行到已连接的设备上。

构建成功后,Xcode 会在你的设备上启动应用,并在调试区域开启调试会话。

现在,你的应用已准备就绪,可以在设备上进行测试了。

第 7 步:进行测试购买

打开应用,通过付费墙完成测试购买。

完成后,请前往验证测试购买文章查看结果。

第八步:继续测试

现在,您的测试环境已全部配置完成。如需再次测试,请清除沙盒账号的购买记录

测试问题

以下是测试应用时可能遇到的常见问题。

TestFlight 问题

如果你在 TestFlight 中未使用沙盒测试账号,将无法清除购买记录,从而导致各种问题和错误的测试结果。

如果你不小心忘记切换到沙盒测试账号就打开了应用,哪怕只打开过一次,TestFlight 也会将你的购买记录关联到正式 Apple 账号,进而引发意想不到的问题。

请按以下步骤解决:

  1. 从测试设备上删除该应用。
  2. 按照沙盒测试的步骤进行操作。

不仅要重新安装应用,还需要切换到沙盒测试账户、清除购买记录,并使用沙盒测试账户启动应用。

共享访问等级问题

如果你用同一个沙盒测试账号反复测试,可能会遇到测试用户的共享访问等级出现异常行为的情况。

要检查用户是否继承了访问等级,请在 Adapty 看板中前往 Profiles & Segments,然后打开该用户的用户画像。

profile-access-level-origin.webp

如果用户拥有继承的访问等级,请按以下步骤操作以获得准确的测试结果:

  1. 删除父用户画像。
  2. 从测试设备上卸载应用。
  3. 从 TestFlight 下载应用
  4. 切换到沙盒测试账号
  5. 清除购买记录
  6. 打开应用并完成测试购买

清除购买记录会重置商店端的购买历史。删除父级用户画像只会移除 Adapty 端的记录。若要了解为何重复使用的账户仍保留访问权限,以及哪些重置操作真正有效,请参阅重置测试者的订阅

在 TestFlight 中更新应用

如果 TestFlight 上的应用已更新:

  1. 从测试设备上删除该应用。
  2. 从 TestFlight 下载应用
  3. 切换到沙盒测试账号
  4. 清除购买记录
  5. 打开应用并进行测试购买

重置测试者的订阅

在沙盒环境中,购买记录归属于 Apple 沙盒账号,而非 Adapty 用户画像。对用户画像执行的操作(如删除或修改其访问等级)不会从 Store 账号中移除购买记录。下次重新安装或同步时,SDK 会重新关联相同的交易,测试者将再次获得访问权限。

下表列出了每种重置操作所影响的内容,以及测试者在此之后看到的结果。

操作Adapty 用户画像Apple 沙盒账号测试者后续访问情况
在 Adapty 看板中删除用户画像已删除不受影响恢复 — 重装后,新用户画像会重新关联相同的交易链
通过 Delete profile API 删除用户画像已删除不受影响恢复 — 与在看板中删除效果相同
通过 Add access level 添加一个过去的到期日期下次同步时被覆盖不受影响恢复 — 下次续订时,有效订阅会重新应用一个未来的到期日期
调用 Revoke access level API立即到期,触发 access_level_updatedis_active=false不受影响恢复 — 下次续订或重装时恢复,不能作为可靠的沙盒重置手段
在沙盒账号中取消订阅无直接变更订阅已取消续订停止,当前订阅期到期后失去访问权限,测试者可重新购买该产品
使用全新的 Apple 沙盒账号登录新用户画像全新的空账号干净 — 推荐用于重复测试

将测试人员重置为干净状态

如需反复测试购买流程,建议每次使用全新的 Apple 沙盒账号,而不是重置用户画像。按照第 1 步创建账号,再按照第 4 步在设备上切换到该账号。如果要复用已有的沙盒账号,请先清除其购买记录——删除 Adapty 用户画像并不会清除购买记录。

撤销现有测试用户的访问权限

如需撤销测试用户的访问权限,请不要回溯修改过期时间,也不要调用 Revoke access level API。在沙盒环境中,订阅每隔几分钟就会自动续订,每次续订都会在同一交易链上恢复一个未来的过期时间,因此访问权限会自动恢复。Revoke access level API 确实会触发 access_level_updatedis_active=false)事件,但下一次续订会将其覆盖。 要真正停止访问权限,需要在商店侧取消订阅。在测试设备上,进入 Settings > Developer > Sandbox Apple Account,选择 Manage,然后取消订阅。续订将停止,访问权限将在当前订阅周期到期后终止。

为什么删除用户画像后访问权限又回来了

当测试人员重新安装应用时,Adapty 会接收沙盒账户的购买记录,并将新安装与已有购买关联起来。购买记录绑定的是商店账户,而不是你删除的用户画像。

  • 匿名用户画像:在未设置 customer_user_id 的情况下重新安装,无论你的付费访问共享设置如何,都会继承该商店账户的访问等级。
  • 已识别用户画像:访问等级是否会转移到新的 customer_user_id,取决于你的付费访问共享设置。

关于 Adapty 如何将这些用户画像关联成链,请参阅用户画像的工作原理

测试订阅

在使用沙盒测试账号测试应用时,你可以为每位测试人员单独设置沙盒中的订阅续订频率。详情请参阅 Apple 官方文档中关于编辑订阅续订频率的说明。

默认情况下,订阅最多续订 12 次后停止,具体时间表如下:

订阅时长1 周1 个月2 个月3 个月6 个月1 年
订阅续订速度3 分钟5 分钟10 分钟15 分钟30 分钟1 小时
计费重试时长10 分钟10 分钟10 分钟10 分钟10 分钟10 分钟
计费宽限期时长3 分钟5 分钟5 分钟5 分钟5 分钟5 分钟

请注意,测试交易最多需要 10 分钟才能出现在事件流中。

使用沙盒来验证你的应用和后端能否正确处理续订、账单重试和宽限期——而不是用来预测生产环境的续订时间。上述加速且有上限的时间表与生产环境并不一致。如需在服务器上重放交易以进行后端测试,请使用 Set transaction API

测试优惠

测试优惠要求删除所有用户收据,以确保资格判断正常生效。

最可靠的测试方式是使用全新的沙盒测试账号。使用同一个沙盒测试账号反复测试可能会导致意外行为。

如果要使用同一个沙盒测试账号重复测试,请务必先清除购买历史记录,以避免资格判断方面的问题。