测试应用内购买结算

Google Play Developer Console 提供了一些帮助您测试应用内购买结算实现的工具:

  • 测试购买,让许可测试用户可以真正购买您发布的应用内商品,但不向这些用户帐户实际收取费用。
  • 来自 Google Play 的静态结算响应,用于在开发初期进行测试

要测试应用内购买结算,您需要将应用发布到 Google Play 中的 Alpha 或 Beta 渠道

在您将应用发布到 Alpha 或 Beta 渠道后,测试人员可能需要过几个小时后才能访问您的应用。 测试设备上的 APK 版本代码必须与当前上传到 Google Play 中 Alpha 或 Beta 渠道的版本相匹配。

重要说明:要在您的 Alpha 或 Beta 渠道应用中测试应用内商品或进行应用内购买,每位测试人员需要选择加入您应用的 Alpha 或 Beta 版测试。 测试人员点击选择加入测试的网址后,会看到介绍测试人员定义的相应说明,还会看到一个用于加入测试的链接。

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

测试应用内购买

应用内购买结算实现就绪后,您可以通过以下两种方法测试应用内 SKU 的购买:

  • 测试购买,让您选择的许可测试用户可以购买应用内商品,但不向这些用户收取任何费用。仅可以在 Alpha/Beta 版中使用测试购买。
  • 真正购买,让普通用户真正购买您的应用内商品,并根据用户的付款方式实际收取费用。

在这两种情况下,您都需要将应用发布到 Google Play 的 Alpha 和 Beta 版渠道,管理可进行购买的用户。

下面各部分详细介绍了如何使用这些方法进行测试和验证。

测试购买(应用内购买结算沙盒)

测试购买提供了一种安全、方便的方法,让您在开发过程中或准备发布期间,对您的应用内购买结算实现进行大规模的测试。 测试期间,经过授权的用户帐户可通过 Google Play 购买您的应用内商品,不过这些用户帐户不用实际支付费用。

获得测试访问权限之后,这些用户可以购买您的应用,且不被收取费用。 测试购买没有 orderId 字段,确保不会向用户帐户实际收取费用。

:无论商品的订阅期是多久,测试订阅购买都会每天重复。

设置测试购买

设置测试购买非常简单 — 您可以选择任何用户帐户作为测试帐户,而测试帐户中的任何用户都可以通过可用的付款方式进行测试购买(当然不需要通过付款方式支付任何费用)。

首先,上传并发布您希望测试人员能够购买的应用内商品。 您可以在 Developer Console 中上传和发布应用内商品。请注意,您可以在发布 APK 之前上传并发布应用内商品。

然后,为获得授权的用户创建许可测试帐户。在 Developer Console 中,转到 Settings > Account details,然后在 License Testing 部分将相应地址添加到 Gmail accounts with testing access 字段。 如需了解详细信息,请参阅设置测试购买

在您将用户添加为许可测试人员帐户并保存更改之后,这些用户在 15 分钟内即可开始对您的应用内商品进行测试购买。

重要说明:您将应用发布到 Alpha 或 Beta 渠道后,您的测试人员需要使用提供的加入网址选择加入您应用的 Alpha 或 Beta 测试,然后才能进行测试购买。

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

:测试购买没有 orderId 字段。 要跟踪测试购买,请使用 purchaseToken 字段。

测试购买和开发者帐户

经过授权的许可测试帐户与您在 Google Play 中的开发者帐户关联,而不是与特定 APK 或软件包名称关联。 被标识为测试帐户的帐户可以购买您的任何应用内商品而不用支付费用。

购买流程的详情

在测试购买期间,用户可以在应用中测试实际的销售、购买和订单完成流程。 购买时,应用内商品与普通商品一样,会显示实际价格。 不过,Google Play 会在购买对话框中心处显示通知,说明这是测试购买,以便辨识。

取消已完成的测试购买

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

在某些情况下,您可能需要手动取消测试购买才能继续测试。 要执行此操作,请打开 Play 商店中的应用页面。如果您想要取消的测试购买为订阅,也可以使用 Purchases.subscriptions API 的 cancel() 方法。

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

使用真实交易进行测试

在准备发布使用应用内购买结算的应用时,您可以先利用 Google Play Alpha/Beta 测试选项对您的实现进行验证和负载测试,然后再向所有用户发布应用。

Alpha/Beta 测试小组内的真实用户(由您选择)可以通过 Google Play 安装您的应用并测试应用内商品。 他们可以通过其在 Google Play 中的常规付款方式进行真正的购买,而他们的帐户中会产生实际费用。 请注意,如果您的 Alpha 和 Beta 分发组中包括测试许可帐户,这些用户将只能进行测试购买。

重要说明:您将应用发布到 Alpha 或 Beta 渠道后,您的测试人员需要使用提供的加入网址选择加入您应用的 Alpha 或 Beta 测试,然后才能进行测试购买。

使用静态响应进行测试

我们建议您先使用来自 Google Play 的静态响应测试应用内购买结算实现。 这样,您就可以确认应用能否正确处理主要 Google Play 响应,以及您的应用能否正确验证签名。 即使应用尚未发布,您也可以执行此测试。

要使用静态响应测试您的实现,请使用具有预留商品 ID 的特殊商品发送应用内购买结算请求。 每个预留的商品 ID 都会从 Google Play 返回特定的静态响应。 当您使用预留的商品 ID 发送应用内购买结算请求时,不会发生资金转移。 此外,使用预留的商品 ID 发送购买结算请求时,您也不能指定付款方式。 图 1 显示了商品 ID 为“android.test.purchased”的预留商品的结账流程。

图 1. 特殊预留商品“android.test.purchased”的购买流程。

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

:过去,您可以通过上传未发布的“草稿”版本来测试应用。 但现在已不再支持此功能。 不过,即使未将应用上传到 Google Play 商店,您也可以使用静态响应测试应用。 如需了解详细信息,请参阅草稿应用不再受支持

用于测试静态应用内购买结算响应的预留商品 ID 有四个:

  • android.test.purchased

    当您使用此商品 ID 发送应用内购买结算请求时,Google Play 会假定您成功购买了商品并据此进行响应。 响应将包括一个 JSON 字符串,其中包含模拟购买信息(例如模拟订单 ID)。 在某些情况下,JSON 字符串已经过签名,且响应中也包括签名,因此您可以利用这些响应测试您的签名验证实现。

  • android.test.canceled

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

  • android.test.refunded

    当您使用此商品 ID 发送应用内购买结算请求时,Google Play 会假定购买已被退款并据此进行响应。 退款不能通过 Google Play 的应用内购买结算服务发起, 而是必须由您(商家)发起。在您通过自己的 Google Payments 商家帐号处理退款请求之后,Google Play 会向您的应用发送一条退款消息。 只有 Google Play 收到来自 Google Payments 的退款已执行的通知时,Google Play 才会发送此消息。 如需了解有关退款的详细信息,请参阅处理 IN_APP_NOTIFY 消息应用内购买结算定价

  • android.test.item_unavailable

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

在某些情况下,预留的商品可能会返回带签名的静态响应,这样您就可以测试应用中的签名验证。 只有运行应用的用户拥有开发者测试账户时,预留的商品才会返回带签名的响应。

要使用预留的商品 ID 发送应用内购买结算请求,您只需构建一个常规的 REQUEST_PURCHASE 请求,不过请使用上文介绍的一个预留商品 ID,而不要使用您的应用商品列表中的真实商品 ID。

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

  1. 在 Android 设备上安装您的应用。

    您无法使用模拟器测试应用内购买结算;只有将应用安装到设备上,才能测试应用内购买结算。

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

  2. 使用您的开发者帐户登录设备。

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

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

    如果您的设备运行的是 Android 3.0,则应用内购买结算要求使用版本为 5.0.12(或更高版本)的 MyApps 应用。 如果您的设备运行的是其他版本的 Android,则应用内购买结算要求使用版本为 2.3.4(或更高版本)的 Google Play 应用。 要了解如何查看 Google Play 应用的版本,请参阅更新 Google Play

  4. 运行应用并购买预留商品。

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

设置测试购买

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

:您可以将应用发布到 Alpha 发布渠道来进行端到端的测试。 这样,您就可以将应用发布到 Google Play 商店,但限为仅向您指定的测试者提供此应用。

要通过实际的应用内购买测试您的应用内购买结算实现,请在 Google Play Developer Console 中注册至少一个测试帐户。 您不能使用自己的开发者帐户测试完整的应用内购买流程,因为 Google Payments 不允许您购买自己的商品。 如果您之前没有设置过测试帐户,请参阅设置测试帐户

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

要通过实际购买测试您的应用内购买结算实现,请按以下步骤操作:

  1. 通过 Developer Console 将您的应用上传到 Alpha 发布渠道。

    :过去,您可以通过上传未发布的“草稿”版本来测试应用。 此功能已不受支持;您必须将应用发布到 Alpha 或 Beta 分发渠道。 如需了解详细信息,请参阅草稿应用不再受支持

  2. 将商品添加到应用的商品列表。

    请务必发布商品(应用可以保持未发布状态)。要了解如何执行此操作,请参阅创建商品列表

  3. 在 Android 设备上安装您的应用。

    您无法使用模拟器测试应用内购买结算;只有将应用安装到设备上,才能测试应用内购买结算。

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

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

    如果您的设备运行的是 Android 3.0,则应用内购买结算要求使用版本为 5.0.12(或更高版本)的 MyApps 应用。 如果您的设备运行的是其他版本的 Android,则应用内购买结算要求使用版本为 2.3.4(或更高版本)的 Google Play 应用。 要了解如何查看 Google Play 应用的版本,请参阅更新 Google Play

  5. 在应用中进行应用内购买。

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

完成对应用内购买结算实现的测试之后,您就可以在 Google Play 上发布应用了。 您可以遵循准备登录以及在 Google Play 上发布这一常规步骤。

草稿应用不再受支持

过去,您可以发布应用的“草稿”版本进行测试。但现在,此功能已不再受支持。 您可以通过两种方式在 Google Play 商店中测试预览版应用的功能运行情况:

  • 您可以将应用发布到 Alpha 或 Beta 发布渠道。 这样,应用将进入 Google Play 商店,但只提供给您添加到“白名单”中的测试人员。
  • 在少数情况下,您可以使用未发布的应用测试 Google Play 的功能。 例如,您可以使用静态响应、特殊的预留商品 ID(始终返回特定结果,例如“已购买”或“已退款”)来测试未发布应用的应用内购买结算支持。