测试 Google Play 结算服务

实现 Google Play 结算服务后,您便可以测试应用内商品的购买交易。本文档包含四个部分:

测试准备

要准备测试您的 Google Play 结算服务实现,请执行以下任务:

  1. 将您的应用发布到 Google Play 中的封闭式或开放式测试轨道。在您将应用发布到测试轨道后,测试人员可能需要过几个小时后才能访问该应用。
  2. 确保每个测试人员都选择加入您应用的测试。测试人员点击选择加入测试的网址后,会看到关于测试人员职责的说明,还会看到加入链接。

您可以在搭载 Android 1.6 或更高版本的任一 Android 硬件设备上进行测试。必须在设备上安装最新版本的 Google Play 应用。有关如何设置设备以便用于开发 Android 应用的一般信息,请参阅使用硬件设备

独自测试 Google Play 结算服务应用

使用静态响应进行测试

Google Play 结算服务会提供预留商品 ID 和相关静态响应的组合,您可以用其测试 Google Play 结算服务实现。通过这些响应,您可以验证您的应用能否正确处理主要 Google Play 响应。即使该应用尚未发布,您也可以在让测试人员参与之前使用这些静态响应测试您的 Google Play 结算服务实现。

要使用静态响应测试您的实现,请使用具有预留商品 ID 的特殊商品发送 Google Play 结算服务请求。每个预留的商品 ID 均会从 Google Play 返回特定的静态响应。当您使用预留的商品 ID 发送 Google Play 结算服务请求时,不会发生资金转移。此外,当您使用预留的商品 ID 发送购买结算请求时,您也不能指定付款方式。

注意:静态响应不能用于测试订阅。

您不需要在应用的商品列表中列出预留的商品。Google Play 已经知道预留的商品 ID。此外,您不需要将应用上传到 Play 管理中心,就可以使用预留的商品 ID 执行静态响应测试。您只需在设备上安装您的应用,登录到设备,然后使用预留的商品 ID 发送购买结算请求。

注意:过去,您可以通过上传已取消发布的“草稿”版本来测试应用。但现在,此功能已不再受支持。不过,即使未将应用上传到 Google Play 商店,您也可以使用静态响应测试应用。有关详情,请参阅使用静态响应进行测试

用于测试静态 Google Play 结算服务响应的预留商品 ID 有三个:

  • android.test.purchased

    当您使用此商品 ID 发送 Google Play 结算服务请求时,Google Play 会假定您成功购买了商品并据此进行响应。响应将包括一个 JSON 字符串,其中包含虚拟购买信息(例如虚拟订单 ID)。

  • android.test.canceled

    当您使用此商品 ID 发送 Google Play 结算服务请求时,Google Play 会假定购买已被取消并据此做出响应。如果订购流程出现问题(例如信用卡无效,或您在用户付款之前取消了订单),就会发生这种情况。

  • android.test.item_unavailable

    当您使用此商品 ID 发送 Google Play 结算服务请求时,Google Play 会假定所购商品在您应用的商品列表中不存在并据此做出响应。

要使用预留的商品 ID 发送 Google Play 结算服务请求,请构建一个常规的 REQUEST_PURCHASE 请求,使用上文介绍的一个预留商品 ID(而不要使用您应用的产品列表中的真实商品 ID)。

要使用预留的商品 ID 测试应用,请按以下步骤操作:

  1. 修改您的应用,以便在购买流程中使用三个预留的商品 ID 之一。要了解如何使用商品 ID 进行购买,请参阅启用购买应用内商品
  2. 在 Android 设备上安装您的应用。

    您无法使用模拟器测试 Google Play 结算服务,而必须在设备上安装应用才能测试 Google Play 结算服务。

    要了解如何在设备上安装应用,请参阅在设备上运行

  3. 使用您的开发者帐号登录到设备。

    如果您只是使用预留的商品 ID 进行测试,则无需使用测试帐号。

  4. 确保您的设备运行的是受支持版本的 Google Play 应用或 MyApps 应用。

    如果您的设备运行的是 Android 3.0,Google Play 结算服务会要求使用 5.0.12 版(或更高版本)的 MyApps 应用。如果您的设备运行的是任何其他版本的 Android,则 Google Play 结算服务会要求使用 2.3.4 版(或更高版本)的 Google Play 应用。要查看 Google Play 应用的版本,请启动该应用,然后打开设置菜单并向下滚动以查看版本信息。

  5. 运行您的应用并使用预留的商品 ID 进行购买。您的 onPurchasesUpdated() 中的代码应该正确处理静态响应。要了解如何实现 onPurchasesUpdated(),请参阅启用购买应用内商品
  6. 使用其他预留的商品 ID 重新测试。

注意:使用预留的商品 ID 发送 Google Play 结算服务请求会覆盖常用的 Google Play 生产系统。当您针对某个预留的商品 ID 发送 Google Play 结算服务请求时,服务的质量会比不上生产环境。

测试完整的购买流程

完成静态响应测试,并确认应用中的签名验证正常工作之后,您就可以通过执行实际的应用内购买来测试 Google Play 结算服务的实现。测试真实的应用内购买能让您测试端到端的 Google Play 结算服务体验,包括从 Google Play 进行实际购买,以及用户将在您的应用中体验的实际结帐流程。

注意:您可以将应用发布到封闭式测试轨道来进行端到端的测试。这样,您就可以将应用发布到 Google Play 商店,但限为仅向您指定的测试人员提供此应用。

要通过实际的应用内购买来测试您的 Google Play 结算服务实现,您必须使用测试帐号。默认情况下,注册的唯一测试帐号是与您的开发者帐号相关联的帐号。您可以使用 Google Play 管理中心注册其他测试帐号。如果您之前未设置测试帐号,请参阅设置测试帐号

测试帐号只能购买您的商品列表中已经发布的商品。

要通过实际购买测试您的 Google Play 结算服务实现,请按以下步骤操作:

  1. 将您的应用上传到 Play 管理中心的封闭式测试轨道

    注意:在您初次上传应用后,已获许可的测试人员可以从您应用的开发版购买,而无需上传到 Play 管理中心。这样,您可以使用调试签署的版本号并进行更改,而无需每次都上传新版本。

    注意:过去,您可以通过上传已取消发布的“草稿”版本来测试应用。而现在,此功能已不再受支持。您必须将应用发布到封闭式或开放式测试轨道。有关详情,请参阅草稿应用不再受支持

  2. 在 Play 管理中心创建应用内商品。有关详情,请参阅创建一次性商品创建订阅
  3. 在 Android 设备上安装您的应用。您无法使用模拟器测试 Google Play 结算服务。要了解如何在设备上安装应用,请参阅在设备上运行您的应用
  4. 验证您的设备是否在运行受支持版本的 Google Play 应用或 MyApps 应用。如果您的设备运行的是 Android 3.0,Google Play 结算服务会要求使用 5.0.12 版(或更高版本)的 MyApps 应用。如果您的设备运行的是任何其他版本的 Android,则 Google Play 结算服务会要求使用 2.3.4 版(或更高版本)的 Google Play 应用。要了解如何查看 Google Play 应用的版本,请参阅更新 Google Play
  5. 在应用中进行应用内购买。

注意:在设备上更改主要帐号的唯一方法是恢复出厂设置,并确保先使用您的主要帐号登录。

用户测试 Google Play 结算服务应用

设置测试帐号

要设置测试人员帐号,请执行以下操作:

  1. 使用 Play 管理中心上传并发布您希望测试人员能够购买的应用内商品。请注意,您可以在发布 APK 之前上传并发布应用内商品。
  2. 使用 Play 管理中心创建许可测试人员帐号:
    1. 依次转到设置 > 帐号详情
    2. 在“许可测试”部分中,将测试人员的电子邮件地址添加到可用于测试的 Gmail 帐号字段。
    3. 保存您的更改。测试人员可以在 15 分钟内开始购买您的应用内商品。

注意:必须在测试人员的 Android 设备上设置测试帐号。如果设备上有多个帐号,则必须使用下载应用时所用的帐号进行购买。如果没有帐号下载过应用,则使用第一个帐号进行购买。用户可以通过展开购买对话框来确认执行购买的帐号。

指示测试人员进行测试购买

设置测试帐号后,您可以指示用户进行测试购买。以下是有关测试购买流程的一些详细信息:

  • 用户将使用普通用户使用的同一应用购买流程。
  • 用户应至少进行两次购买交易,一次采用“始终批准”的付款方式,一次采用“始终拒绝”的付款方式。使用这些付款方式进行测试,您可以确保您的应用在付款获得批准或遭到拒绝时给出正确响应。图 1 显示了购买流程中出现的这些测试付款方式:
    图 1. 许可测试用户的付款方式测试付款方式选项。
    已获许可的测试人员只能使用这两种付款方式。使用这些付款方式时,购买流程将立即返回结果。
  • 系统不会针对测试购买计算税费。
  • 已获许可的测试人员无需为他们的购买支付费用。
  • Google Play 通过在购买对话框中心处显示通知来指示测试购买。

注意:如果您希望能够为同一应用内商品执行多次测试购买,请在每次购买后将商品标记为已消费。为此,请调用 consumeAsync()

用真实帐号进行测试

在准备发布使用 Google Play 结算服务的应用时,您可以先利用 Google Play 封闭式或开放式版本选项对您的实现进行验证和负载测试,然后再向所有用户分发应用。

加入封闭式或开放式测试组后,用户可以通过 Google Play 安装您的应用并测试您的应用内商品。用户可以通过其在 Google Play 中的常规付款方式进行真正的购买,而他们的帐号中会产生实际费用。

注意:如果您在封闭式和开放式测试分发组中包含测试许可帐号,则这些用户将只能进行测试购买。

测试一次性商品专用功能

测试应用内促销

如果您的应用支持应用内促销,请测试以下用例。

用户在应用内兑换促销代码

如果用户在应用的购买流程中兑换促销代码(如发起应用内购买结算请求中所述),系统会调用您 Activity 的 onActivityResult() 方法来处理购买。无论用户使用资金支付还是使用促销代码支付,都要验证 onActivityResult() 是否能正确处理购买。

用户在 Google Play 商店内兑换促销代码

如果用户在 Play 商店中兑换促销代码,则可能存在多个可能的工作流程。请验证下面每个工作流程。

应用未安装

如果用户为设备上未安装的某款应用兑换促销代码,Play 商店会提示用户安装该应用。(如果应用已安装但不是最新版本,Play 商店会提示用户更新应用。)在未安装您应用的设备上按以下顺序进行测试。

  1. 用户在 Play 商店中为应用兑换促销代码。Play 商店会提示用户安装您的应用。
  2. 用户安装并启动您的应用。验证应用在启动时是否可调用 getPurchases(),并能正确检测用户使用促销代码发起的购买。
应用已安装但未运行

如果用户为设备上已安装的某款应用兑换促销代码,Play 商店会提示用户切换到该应用。在已安装您的应用但并未运行应用的设备上按以下顺序进行测试:

  1. 用户在 Play 商店中为应用兑换促销代码。Play 商店会提示用户切换到您的应用。
  2. 用户启动您的应用。验证应用在启动时是否可调用 getPurchases(),并能正确检测用户使用促销代码发起的购买。
应用已安装并且正在运行

如果用户为设备上当前正在运行的某款应用兑换促销代码,Play 商店将通过 PURCHASES_UPDATED intent 通知应用。按一下顺序进行测试:

  1. 用户启动应用。验证您的应用是否已正确注册以接收 PURCHASES_UPDATED intent。
  2. 用户以手动方式或使用包含促销代码的生成网址启动 Play 商店应用,并为应用兑换促销代码。Play 商店会触发 PURCHASES_UPDATED intent。验证系统是否会触发您应用的 BroadcastReceiver.onReceive() 回调来处理 intent。
  3. 您的 onReceive() 方法应通过调用 getPurchases() 来响应该 intent。验证您的应用是否可调用此方法并能正确检测用户使用促销代码发起的购买。
  4. 用户切换回您的应用。验证用户是否已购买该商品。

测试订阅专用功能

一次性商品和订阅的购买流程类似,但订阅还有其他场景(例如,订阅续订成功或遭到拒绝)。为了帮助测试您的应用在这两种场景中的运行情况,您可以使用“测试付款方式,始终批准”和“测试付款方式,始终拒绝”付款方式。使用这些付款方式来测试除成功订阅之外的场景。

测试订阅续订

为了帮助测试,测试订阅续订的速度会比正常情况更快。下表列出了各种时段订阅的测试续订时间。

注意:这些时间均为近似值;您可能会看到事件的准确时间有一些细微差异。要弥补差异,请在每个订阅失效日期之后调用 API 以查看当前状态。

生产订阅周期测试订阅续订
1 周5 分钟
1 个月5 分钟
3 个月10 分钟
6 个月15 分钟
1 年30 分钟

注意:测试订阅最多可续订 6 次。

基于时间的订阅功能(例如免费试订)也缩短了用于测试的时间。下表列出了与基于时间的订阅功能相关联的测试时间段:

功能测试周期
免费试订3 分钟
初次体验价周期与订阅测试周期相同
宽限期(3 天和 7 天) 5 分钟
帐号保留功能10 分钟

续订率测试场景

点击显示/隐藏可显示多个测试场景(演示了测试续订率的时间间隔)。

取消已完成的测试购买

Google Play 会累积每个用户已完成的测试购买,但不会将相关信息传递到财务流程。

测试购买不会自动取消,因此您可能需要手动取消测试购买才能继续测试。要执行此操作,请打开 Play 商店中的应用页面。如果要取消的测试购买是订阅,您还可以使用 Purchases.subscriptions API 的 cancel() 方法。

重要提示:Purchases.subscriptions API 的 refund()revoke() 方法不支持测试购买。

后续步骤

完成对 Google Play 结算服务实现的测试之后,您就可以在 Google Play 上发布应用了。您可以按照常规步骤准备登录以及在 Google Play 上发布