沙盒测试
在 Adapty 看板和移动应用中完成所有配置后,就可以开始进行应用内购买测试了。 注意: 任何测试工具都不会向用户收取实际费用。App Store 不会针对测试环境中的购买或退款发送邮件通知。
沙盒交易不会显示在任何分析数据图表中。 它们仍会出现在各个用户画像页面和事件流中。
在进行应用内购买测试之前,请确认以下事项:
- 已完成快速入门指南中关于商店集成、添加产品及 Adapty SDK 集成的步骤。
- 你的产品在 App Store Connect 中已标记为 Ready to submit。
沙盒测试
我们建议在真机上测试应用内购买。虽然沙盒购买可以在模拟器上运行,但要完整测试所有流程(包括支付对话框和生物识别提示),还是需要真机。
你有两种主要方式来测试应用内购买:
- 在 Xcode 中构建并在测试设备上运行:适合开发人员和 QA 工程师。
- 通过 TestFlight 使用沙盒测试账户:适合其他所有人。
以下指南将介绍这两种方式。
第 1 步:在 App Store Connect 中创建沙盒测试账号
请创建一个全新的沙盒测试账号,以确保购买历史是干净的。如果复用已有账号,之前购买过的产品将仍然可用,届时将无法再次测试购买流程。
只需几步即可创建新的沙盒测试账号:
- 在 App Store Connect 中前往 Users and Access > Sandbox > Test Accounts,然后点击 +。
- 填写测试用户信息。请务必设置 Country or Region,因为这会影响该地区的产品可用性和购买货币。
- 如果你使用 Gmail 或 iCloud,可以通过加号子地址复用现有邮箱地址。
- 你也可以使用一个根本不存在的随机邮箱地址,但请确保在测试设备上登录时拒绝双因素认证(2FA)。
- 点击 Create。
第二步:启用开发者模式
如果您的测试设备已启用开发者模式,或者您没有 Mac 设备,请跳过此步骤。
您需要准备一台安装了 Xcode 的 Mac 以及测试设备的数据线:
- 在 Mac 上打开 Xcode。如果您打算通过 TestFlight 测试应用内购买,只需确保已安装 Xcode 即可,不需要在其中打开任何项目。
- 用数据线将测试设备连接到 Mac。
- 在测试设备上进入 Settings > Privacy & Security > Developer Mode,然后开启开发者模式。
第三步:从 TestFlight 下载应用
此步骤仅适用于通过 TestFlight 进行测试的情况。如果你在 Xcode 中直接构建应用,请跳过此步骤。
有关如何将应用提交至 TestFlight 的详细信息,请参阅 Apple 文档。
在下载 TestFlight 应用之前,请确保在测试设备上已使用你的正式 Apple 账号登录,然后从 TestFlight 下载要测试的应用。
下载完成后请勿打开应用,直接进行后续步骤。 如果不小心打开了,请从测试设备上删除该应用并重新下载。否则,您的购买记录可能不干净,测试应用内购时会出现错误。
第四步:切换到沙盒测试账号
不用 Mac?这里有个替代方案
如果你不在 macOS 上工作,就无法通过 Xcode 切换到沙盒账号。不过你仍然可以直接在测试设备上完成切换:
- 在测试设备上前往 Settings > Your Apple Account > Media & Purchases。
- 在弹出菜单中选择 Sign Out。
- 打开从 TestFlight 下载的应用,尝试购买一个产品。
- 当提示登录时,输入你的沙盒账号凭据,即可切换到沙盒环境。
切换到沙盒账户:
- 在测试设备上前往 Settings > Your Apple Account > Media & Purchases。
- 从弹出菜单中选择 Sign Out。
- 前往 Settings > Developer。如果找不到 Developer 选项,请确认你已在第 2 步中启用了它。
- 向下滚动到 Sandbox Apple Account 部分,然后点击 Sign In。
- 使用您的沙盒 Apple 账户凭据登录。
第 5 步:清除购买记录
如果你刚创建了一个新的沙盒测试账户并已切换到该账户,可以跳过此步骤,因为它仅适用于使用同一沙盒测试账户重复测试的情况。
- 在测试设备上,前往 Settings > Developer > Sandbox Apple Account。
- 从弹出菜单中选择 Manage。
- 进入 Account Settings,然后点击 Clear Purchase History。
每次使用同一个沙盒测试账号重复测试时,都需要执行此步骤。此时,你还需要退出沙盒测试账号,然后重新登录,以清除测试设备上的购买历史缓存。
第六步:在 Xcode 中构建并运行
此步骤仅适用于使用 Xcode 构建进行测试的情况。如果你使用的是 TestFlight,请跳过此步骤。
- 将测试设备连接到 Mac。
- 打开 Xcode。
- 点击工具栏中的 Run,或选择 Product > Run,将应用构建并运行到已连接的设备上。
构建成功后,Xcode 会在你的设备上启动应用,并在调试区域开启调试会话。
现在,你的应用已准备就绪,可以在设备上进行测试了。
第 7 步:进行测试购买
打开应用,通过付费墙完成测试购买。
完成后,请前往验证测试购买文章查看结果。
第八步:继续测试
现在,您的测试环境已全部配置完成。如需再次测试,请清除沙盒账号的购买记录。
测试问题
以下是测试应用时可能遇到的常见问题。
TestFlight 问题
如果你在 TestFlight 中未使用沙盒测试账号,将无法清除购买记录,从而导致各种问题和错误的测试结果。
如果你不小心忘记切换到沙盒测试账号就打开了应用,哪怕只打开过一次,TestFlight 也会将你的购买记录关联到正式 Apple 账号,进而引发意想不到的问题。
请按以下步骤解决:
- 从测试设备上删除该应用。
- 按照沙盒测试的步骤进行操作。
不仅要重新安装应用,还需要切换到沙盒测试账户、清除购买记录,并使用沙盒测试账户启动应用。
共享访问等级问题
如果你用同一个沙盒测试账号反复测试,可能会遇到测试用户的共享访问等级出现异常行为的情况。
要检查用户是否继承了访问等级,请在 Adapty 看板中前往 Profiles & Segments,然后打开该用户的用户画像。
如果用户拥有继承的访问等级,请按以下步骤操作以获得准确的测试结果:
- 删除父用户画像。
- 从测试设备上卸载应用。
- 从 TestFlight 下载应用。
- 切换到沙盒测试账号。
- 清除购买记录。
- 打开应用并完成测试购买。
清除购买记录会重置商店端的购买历史。删除父级用户画像只会移除 Adapty 端的记录。若要了解为何重复使用的账户仍保留访问权限,以及哪些重置操作真正有效,请参阅重置测试者的订阅。
在 TestFlight 中更新应用
如果 TestFlight 上的应用已更新:
- 从测试设备上删除该应用。
- 从 TestFlight 下载应用。
- 切换到沙盒测试账号。
- 清除购买记录。
- 打开应用并进行测试购买。
重置测试者的订阅
在沙盒环境中,购买记录归属于 Apple 沙盒账号,而非 Adapty 用户画像。对用户画像执行的操作(如删除或修改其访问等级)不会从 Store 账号中移除购买记录。下次重新安装或同步时,SDK 会重新关联相同的交易,测试者将再次获得访问权限。
下表列出了每种重置操作所影响的内容,以及测试者在此之后看到的结果。
| 操作 | Adapty 用户画像 | Apple 沙盒账号 | 测试者后续访问情况 |
|---|---|---|---|
| 在 Adapty 看板中删除用户画像 | 已删除 | 不受影响 | 恢复 — 重装后,新用户画像会重新关联相同的交易链 |
| 通过 Delete profile API 删除用户画像 | 已删除 | 不受影响 | 恢复 — 与在看板中删除效果相同 |
| 通过 Add access level 添加一个过去的到期日期 | 下次同步时被覆盖 | 不受影响 | 恢复 — 下次续订时,有效订阅会重新应用一个未来的到期日期 |
| 调用 Revoke access level API | 立即到期,触发 access_level_updated(is_active=false) | 不受影响 | 恢复 — 下次续订或重装时恢复,不能作为可靠的沙盒重置手段 |
| 在沙盒账号中取消订阅 | 无直接变更 | 订阅已取消 | 续订停止,当前订阅期到期后失去访问权限,测试者可重新购买该产品 |
| 使用全新的 Apple 沙盒账号登录 | 新用户画像 | 全新的空账号 | 干净 — 推荐用于重复测试 |
将测试人员重置为干净状态
如需反复测试购买流程,建议每次使用全新的 Apple 沙盒账号,而不是重置用户画像。按照第 1 步创建账号,再按照第 4 步在设备上切换到该账号。如果要复用已有的沙盒账号,请先清除其购买记录——删除 Adapty 用户画像并不会清除购买记录。
撤销现有测试用户的访问权限
如需撤销测试用户的访问权限,请不要回溯修改过期时间,也不要调用 Revoke access level API。在沙盒环境中,订阅每隔几分钟就会自动续订,每次续订都会在同一交易链上恢复一个未来的过期时间,因此访问权限会自动恢复。Revoke access level API 确实会触发 access_level_updated(is_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。
测试优惠
测试优惠要求删除所有用户收据,以确保资格判断正常生效。
最可靠的测试方式是使用全新的沙盒测试账号。使用同一个沙盒测试账号反复测试可能会导致意外行为。
如果要使用同一个沙盒测试账号重复测试,请务必先清除购买历史记录,以避免资格判断方面的问题。