第二个 Android 11 开发者预览版现已推出,快来测试并分享您的反馈吧

应用内促销 AIDL 参考

警告:AIDL 现已弃用并将在未来的版本中移除。要实现 Google Play 结算功能,请使用 Google Play 结算库

本文档提供了使用 Google Play Billing AIDL API 创建促销活动的技术参考信息。

利用促销代码,您可以向一定数量的用户免费提供内容或功能。创建促销代码后,您可以根据服务条款分发该促销代码。用户在您的应用或 Google Play 商店应用中输入该促销代码,即可免费获得相应商品。您可以充分发挥创意,使用促销代码以多种方式来吸引用户,这些方式包括:

  • 游戏可以只向参加某个活动的玩家提供特殊商品,例如角色或装扮道具。开发者可以在活动中分发带促销代码的卡片,用户输入他们收到的促销代码即可解锁相应商品。
  • 应用开发者可以在局部范围内分发促销代码,以吸引潜在用户试用应用。
  • 应用开发者可以向员工提供“朋友和家人代码”,让他们与好友分享。

每个促销代码都与特定的商品 ID(也称为 SKU)相关联。您可以为现有的应用内商品创建促销代码,也可以在 Play 商店内关闭某个 SKU,这样,获得相应商品的唯一方式就是输入该 SKU 的促销代码。用户在 Play 商店或应用中输入促销代码后即可获得相应商品,就如同付全款购买一样。如果您的应用已经使用版本 3 及更高版本的 In-app Billing API 来支持应用内购买,则可轻松添加对促销代码的支持。

创建和兑换促销代码

您可以通过 Google Play 管理中心创建促销代码。每个促销代码都与在 Play 管理中心内注册的一种商品相关联。

用户可通过以下两种方式之一兑换促销代码:

  • 用户可以在应用的普通购买流程中输入促销代码,如实现应用内购买结算中所述。对于应用来说,这就类似于普通购买,只不过用户在此过程中使用促销代码而不是自己的资金来付款。
  • 用户可以在 Google Play 商店应用中兑换代码。您可以让用户在 Google Play 商店应用中手动输入代码;也可以在您的应用中生成一个网址,以便在 Google Play 商店自动为用户提供代码。要自动提供代码,请生成并启动采用以下结构的网址,并将 <code> 替换为促销代码:
    https://play.google.com/redeem?code=<code>
    示例如下:
    https://play.google.com/redeem?code=bvlkfdxkjghlkgdhlkj
    要了解如何在 Android 应用中生成 Google Play 的链接,请参阅链接到 Google Play。在用户输入代码后,Play 商店会提示用户打开应用(如果用户已安装最新版本)或者下载或更新应用。

在您的应用中支持促销代码

要支持促销代码,每当您的应用启动或恢复时,都必须调用 getPurchases() 方法。此方法将返回当前未消耗的所有购买商品,包括用户通过兑换促销代码发起的购买交易。最简单的方式是在 Activity 的 onResume() 方法中调用 getPurchases(),因为该回调会在创建 Activity 和取消暂停 Activity 时触发。在启动和恢复时调用 getPurchases() 可以确保应用了解用户在应用未运行时可能进行的所有购买和兑换活动。此外,如果用户在应用运行时发起购买交易,但应用由于某种原因未收到该交易,则当该 Activity 下一次恢复并调用 getPurchases() 时,应用仍会收到有关该交易的信息。

您的应用应允许用户在应用内部兑换促销代码。如果您的应用支持应用内购买工作流程(如发起应用内购买结算请求中所述),则会自动支持应用内促销代码兑换。在您启动应用内购买界面时,用户可以选择为购买的商品付款,而 onActivityResult() 方法会接收到一个响应 intent,告知应用购买是否已经完成。不过,如果购买和消耗工作流程未完成,您的应用在启动和恢复时仍应当调用 getPurchases()。例如,如果用户成功兑换了促销代码,但您的应用在相应商品被消耗之前崩溃,那么应用在下次启动并调用 getPurchases() 时,仍会收到有关该购买的信息。

您的应用还应支持这样一种情形,那就是用户在应用运行时通过 Play 商店应用兑换促销代码。注册用于监听 PURCHASES_UPDATED intent 的监听器后,当用户兑换代码时,您的应用就可以立即收到相关信息。每当用户兑换促销代码时,Play 商店都会触发此 intent。

要监听 PURCHASES_UPDATED intent,请动态创建一个 BroadcastReceiver 对象并进行注册,让其监听 com.android.vending.billing.PURCHASES_UPDATED。通过在您 Activity 的 onResume() 方法中插入与下面类似的代码,注册接收器。

Kotlin

val filter = IntentFilter("com.android.vending.billing.PURCHASES_UPDATED")

Java

IntentFilter filter = new IntentFilter("com.android.vending.billing.PURCHASES_UPDATED");

当用户发起购买交易时,系统会调用您的广播接收器的 onReceive() 方法。该方法必须调用 getPurchases() 才能查看用户发起了哪些购买交易。

要减少系统在应用未运行时的开销,您的 Activity 的 onPause() 方法必须取消注册广播接收器:

Kotlin

unRegisterReceiver(myPromoReceiver);

Java

unRegisterReceiver(myPromoReceiver);

注意:请勿在应用清单中注册此广播接收器。如果在清单中声明接收器,则在用户于应用未运行时发起购买交易的情况下,会导致系统启动应用来处理 intent。这种行为不是必要行为,并且可能会让用户感到厌烦。要了解用户在应用未运行时发起的任何购买交易的相关信息,请在用户启动应用时调用 getPurchases()

测试应用内促销

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

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

如果用户在应用的购买流程中兑换促销代码(如发起应用内购买结算请求中所述),系统将调用您的 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。验证系统会触发您应用的 onReceive() 回调来处理 intent。
  3. 您的 onReceive() 方法应通过调用 getPurchases() 来响应该 intent。验证您的应用可调用此方法并能正确检测用户使用促销代码发起的购买交易。
  4. 用户切换回您的应用。验证用户已购买该商品。