Google Play In-App Billing(IAB)v3.0からAmazonアプリ内課金(IAP)v2.0に移行する

从 Google Play IAB v3.0 迁移到亚马逊 IAP v2.0

本页讨论 Google Play 的 In-App Billing (IAB) 和亚马逊的应用内购买 (IAP) 之间的区别,并简要介绍如何调整您的应用以同时使用这两个 API 集。

IAB 和 IAP 是什么?

Google Play 的 In-App Billing 功能允许用户直接从您的应用购买虚拟项目。例如,用户可以购买所玩游戏的其他关卡。亚马逊的应用内购买是亚马逊 API 的等效功能。如果您的应用使用的是 Google Play 的 In-App Billing 功能,您可以轻松地修改代码来使用亚马逊的等效应用内购买功能。这两个 API 集具有类似功能,但在命名和术语方面有一些差别。

Amazon Appstore 和亚马逊设备的要求

如果您将实施 Google Play 的 IAB 的应用提交到 Amazon Appstore 以在亚马逊设备(如 Fire 平板电脑)上运行,您的应用将需要实施亚马逊的 IAP 来进行应用内购买。Google Play 的 IAB 在亚马逊设备上将不可用。

亚马逊 IAP v2.0 与 Google Play IAB v3.0

本部分讨论 Google Play 的 IAB v3.0 和亚马逊的 IAP v2.0 之间的相同点和不同点。

功能比较

下表显示了亚马逊的 IAP API 和 Google Play 的 IAB API 之间的比较。

功能 IAP v2.0(亚马逊) IAB v3.0 (Google Play) 备注
​购买
意图由 API 处理。
提供了简单 API 调用的框架。
消费品
个人消费品可多次购买。
权利
购买一次。如果用户尝试购买已拥有的权利,则会通知他们。
订阅
订阅运行的时段选项有多种。 亚马逊的选项:每周、每两周、每月、每两个月、每季度、每半年、每年,Google Play 的选项:每月、每年,每季度(自定义)
支持免费试用期。
自动续订选项。
延期付款选项。
收据验证
购买的收据验证服务 虽然 Google Play 提供收据验证,但 Google Play 的收据验证过程不是自动的。

Google Play 的托管对象与亚马逊的消费品和权利

虽然 Google Play 的 IAB 和亚马逊的 IAP 都让客户进行相同类型的应用内购买,但 Google Play 和亚马逊对其购买类型使用不同的术语。下表说明了与每种亚马逊购买类型等效的 Google Play 类型:

亚马逊 描述 Google Play 等效类型 示例
消费品 先进行购买,然后在应用中使用,通常为游戏。可多次购买。 托管应用内产品 额外生命或移动(在游戏中)、游戏中角色的额外弹药。
权利 一次性购买,用于允许访问应用或游戏中的功能或内容。 托管应用内产品 解锁游戏中的额外关卡或应用中的“仅限高级会员”的功能。
订阅 允许访问一组高级内容或功能有限的一段时间。 订阅 在线杂志订阅、幻想足球联赛访问。

如您所见,Google Play 的 IAB 以相同方式对待所有非订阅购买;用户购买项目,然后使用项目。使用项目后,会在应用中预配置该项目并记录使用。对于很可能是一次性购买的项目(如解锁新游戏关卡),您作为开发者可以选择将项目视为消费品或非消费品并引入逻辑来确保该项目的购买只发生一次。使用亚马逊的 IAP,有意地将这些一次性购买与应用用户可能反复购买的购买(如额外生命)分开。

移植代码

本部分将指导您将应用从 Google Play 的 IAB API 移植到亚马逊 IAP API:

  1. 配置您的 AndroidManifest.xml 文件以支持亚马逊的 IAP。
  2. 在您的应用中,实施逻辑以在 IAB 和 IAP 之间调解。
  3. 添加并实施亚马逊 IAP API。
  4. 测试您的应用。

配置 AndroidManifest.xml 文件

配置您的 AndroidManifest.xml 文件来为您的应用定义 IAP 响应接收器。IAP 响应接收器确保您的应用截取来自亚马逊客户端的意图通信。请注意,如果您同时支持 Google Play 的 IAB 和亚马逊的 IAP,您无需删除与 IAB 相关的元素;IAP 将忽略它们。

在您的 AndroidManifest.xml 文件中,为 IAP ResponseReceiver 添加适当的 <receiver> 标记:

<application>
...
    <receiver android:name="com.amazon.inapp.iap.ResponseReceiver">
        <intent-filter>
            <action android:name="com.amazon.inapp.purchasing.NOTIFY" android:permission="com.amazon.inapp.purchasing.Permission.NOTIFY">
        </action></intent-filter>
    </receiver>
...
</application>

实施逻辑以在 IAB 和 IAP 之间调解

可以对您的应用使用相同的代码库,无论您的应用托管在哪里。只需向您的应用添加逻辑以确定应用是从 Amazon Appstore 还是从 Google Play 下载的。根据用户从哪里下载的应用,执行适用于 IAP 或 IAB 的方法。

以下示例代码确定程序包是从 Google Play 还是从 Amazon Appstore 安装的:

PackageManager pkgManager = context.getPackageManager();

 String installerPackageName = pkgManager.getInstallerPackageName(context.getPackageName());

 if(installerPackageName.startsWith("com.amazon")) {
 // Amazon
 } else if ("com.android.vending".equals(installerPackageName)) {
 // Google Play
 }

添加并实施亚马逊 IAP API

在很大程度上,亚马逊 IAP 的工作原理类似于 Google Play 的 IAB。在您的代码中创建路径以实施 IAP API 时,您应该能够使用类似于 IAB 的逻辑流,但需要考虑不同的类和方法名称。

下表将最常用的 IAP 方法映射到其 IAB 等效方法:

PurchasingService 方法 PurchasingListener 回调 响应对象 等效 IAB 调用
getUserData() onUserDataResponse() UserDataResponse
getPurchaseUpdates() onPurchaseUpdatesResponse() PurchaseUpdatesResponse getPurchases()
getProductData() onProductDataResponse() ProductDataResponse getSkuDetails()
purchase() onPurchaseResponse() PurchaseResponse getBuyIntent()
notifyFulfillment() consumePurchase()

请注意,亚马逊的 notifyFulfillment() 调用与 Google Play 的 consumePurchase() 调用之间有点关联。对 IAB 的托管项目调用 consumePurchase() 将该项目的状态返回为“unpurchased”,这实际上将其转换为消费品。此后,收据将不再显示在对 getPurchases() 的后续调用的响应中。亚马逊将在对 getPurchaseUpdates() 的调用中返回消费品项目的收据,直到应用调用 notifyFulfillment()

有关 IAP 的类和方法的更多信息,请参阅应用内购买 API 参考 v2.0

测试应用

下载并安装 App Tester 工具来测试您的集成了 IAP v2.0 的应用。按照测试应用内购买 (IAP) 中的说明和链接安装和使用 App Tester。

在本地测试您的应用后,您可以使用 Live App Testing 服务通过选定的一组用户在真实生产环境中对您的应用进行 Beta 测试。