手机如何测试应用内购买恢复

联启 手机软件 14

从原理到实操的权威指南

目录导读

  1. 为什么需要测试应用内购买恢复
  2. 核心恢复机制解析:iOS与Android的差异
  3. 测试前的环境准备清单
  4. 分步测试方法:沙盒/测试账号/代码级验证
  5. 常见问题与QA问答
  6. 测试报告模版与自动化工具推荐

为什么需要测试应用内购买恢复

应用内购买(In-App Purchase,IAP)的恢复功能是用户体验的核心保障,当用户更换设备、重装应用或误删购买记录时,恢复机制能自动找回历史购买内容(如订阅、去广告、解锁关卡等)。约30%的IAP相关投诉源于恢复失败,导致用户流失率增加,测试恢复功能不仅是App Store/Google Play商店的审核强制要求,更是维护用户信任的关键环节。

手机如何测试应用内购买恢复-第1张图片-电脑手机工具软件下载 - 免费实用工具合集 | 联启科技


核心恢复机制解析:iOS与Android的差异

iOS(App Store)

  • 使用SKPaymentQueue.default().restoreCompletedTransactions()方法
  • 恢复时会弹出Apple ID认证弹窗,需用户输入密码/面容ID
  • 测试必须在 沙盒环境 中进行,使用沙盒测试账号

Android(Google Play)

  • 通过PurchasesUpdatedListener监听恢复结果
  • 调用queryPurchases()queryPurchaseHistory()方法
  • 测试需使用 许可测试账号 并在Google Play Console中配置

关键差异:iOS需要显式调用恢复方法,Android则通过查询已购列表实现被动恢复;iOS包含“消费型商品”和“非消费型商品”的恢复逻辑不同,而Android所有购买均默认可查询。


测试前的环境准备清单

  • 测试设备:至少2台不同系统版本的真机(模拟器可能无法完整模拟支付回调)
  • 账号准备
    • iOS:在App Store Connect创建 沙盒测试账号(非真实Apple ID)
    • Android:在Google Play Console白名单中添加测试邮箱
  • 网络环境:关闭VPN,确保能直接连接沙盒/测试服务器
  • 代码状态:确保应用的支付SDK版本已升级至最新(常用库:iOS的StoreKit 2,Android的Billing Library 5+)

分步测试方法:沙盒/测试账号/代码级验证

步骤1:模拟首次购买

在沙盒环境下完成一次真实购买(iOS使用沙盒账号,Android使用许可账号),确保支付成功回调中purchaseStatepurchased

步骤2:模拟恢复场景

  • iOS

    1. 卸载应用,重装后点击“恢复购买”按钮
    2. 在代码中添加断点,确认restoreCompletedTransactions被调用
    3. 验证恢复的订单ID与原始购买一致(检查originalTransactionIdentifier
  • Android

    1. 使用同一Google账号在另一台设备登录,打开应用
    2. 应用启动时自动调用queryPurchases()
    3. 检查返回的Purchase对象中的purchaseToken是否与首次购买相同

步骤3:边界测试

  • 网络中断:在恢复过程中断开网络,检查是否触发重试逻辑
  • 账号切换:用未购买过商品的账号尝试恢复,应提示“无历史购买”
  • 跨平台:如果应用支持iOS+Android,恢复需独立测试(不同平台的购买记录不互通)

常见问题与QA问答

Q1:测试时恢复成功,但线上用户反映恢复失败,可能原因是什么?
A:常见原因包括:

  • 线上环境与沙盒环境的签名验证差异(如iOS的生产证书未包含StoreKit功能)
  • 用户未登录正确的Apple ID/Google账号
  • 购买记录被清空(例如用户自行取消订阅后,非消耗型商品依然可恢复,消耗型商品则不能)

Q2:如何模拟“购买后立即恢复”的极端情况?
A:在首次购买回调成功后,立即调用恢复方法,iOS需注意SKPaymentTransaction的状态机顺序,建议在回调中延迟1秒后再执行恢复,避免竞争条件。

Q3:安卓恢复时出现“Item already owned”错误怎么办?
A:这通常是因为应用尝试二次消费同一个消耗型商品,对于非消耗型商品,应直接返回本地缓存;消耗型商品需在服务端标记已消耗,避免客户端重复查询。

Q4:测试时是否需要覆盖“恢复中途退出”的场景?
A:是的,用户可能在输入密码或弹窗时强制退出应用,应用应在启动时检查本地是否存储了未完成的恢复任务,并提示用户重新操作。


测试报告模版与自动化工具推荐

测试报告关键字段
| 测试场景 | 设备/OS版本 | 账号类型 | 恢复结果 | 错误码 | 日志截图 |
|----------|-------------|----------|----------|--------|----------|
| 标准恢复 | iPhone 14 Pro/iOS 17.1 | 沙盒 | 成功 | 无 | - |
| 网络中断恢复 | Pixel 7/Android 14 | 许可账号 | 超时重试 | 3 | 见附件 |

自动化工具推荐

  • iOS:使用Xcode的StoreKit Test(可编写Swift脚本模拟沙盒购买)
  • Android:借助RobolectricMockK模拟Google Play Billing响应
  • 跨平台:如果使用Flutter或React Native,可集成in_app_purchase_test

应用内购买恢复测试是支付功能完整性的最后一道防线,只有通过严谨的沙盒验证、边界覆盖和自动化回归,才能确保用户在任何场景下都能无缝取回自己的购买资产,建议团队将恢复测试纳入CI/CD流水线,每次发布前至少执行一次完整用例集。

标签: 收据查询

抱歉,评论功能暂时关闭!