从Google Play Billing迁移到Amazon IAP
本页讨论Google Play Billing和亚马逊应用内购买(IAP)之间的区别,并简要介绍如何调整您的应用以同时使用这两个API集。
什么是Google Play Billing和IAP?
Google Play Billing功能允许用户直接从您的应用购买数字内容。例如,用户可以为游戏购买额外的关卡。Amazon IAP是亚马逊应用商店的等效功能。如果应用使用Google Play Billing,可以轻松修改代码以使用Amazon IAP功能。这两个API集具有类似功能,但在命名和术语方面有一些差别。
亚马逊应用商店和亚马逊设备的要求
如果应用实现了Google Play Billing,则需要实现Amazon IAP才能将应用提交到亚马逊应用商店。
Appstore SDK与Google Play Billing
本节讨论Google Play Billing和Appstore SDK之间的相似和不同之处。
功能比较
下表显示了Amazon IAP API和Google Play Billing API之间的比较。
功能 | Amazon IAP | Google Play | 备注 |
---|---|---|---|
购买 | |||
意图由API处理。 | 是 | 否 | |
提供了简单API调用的框架。 | 是 | 否 | |
消费品 | |||
个人消费品可多次购买。 | 是 | 是 | |
权利 | |||
购买一次。如果用户尝试购买已拥有的权利,则会收到通知。 | 是 | 是 | |
订阅 | |||
订阅持续的时段有多种选项。 | 是 | 是 | Amazon IAP选项: 每周、每两周、每月、每两个月、每季度、每半年、每年;Google Play选项: 每月、每年、每季度(自定义) |
支持免费试用期。 | 是 | 是 | |
自动续订选项。 | 是 | 是 | |
延期计费选项。 | 否 | 是 | |
收据验证 | |||
购买的收据验证服务 | 是 | 是 | 虽然 Google Play 提供收据验证,但 Google Play 的收据验证过程不是自动的。 |
Google Play托管对象与亚马逊消费品和权利
Google Play Billing和Amazon IAP都支持您的客户进行相同类型的应用内购买。但是,Google Play和亚马逊对其购买类型使用了不同的术语。下表说明了与每种亚马逊购买类型等效的Google Play类型:
亚马逊 | 描述 | Google Play等效类型 | 示例 |
---|---|---|---|
Consumable | 先进行购买,然后在应用中使用,通常为游戏。可多次购买。 | 托管产品 | 额外生命或移动次数(在游戏中)、游戏内角色的额外弹药。 |
Entitlement | 一次性购买,用于访问应用或游戏中的功能或内容。 | 托管产品 | 解锁游戏中的额外关卡或应用中的“仅限高级会员”的功能。 |
Subscription | 允许在一段有限的时间内访问一组优质内容或功能。 | Subscription | 在线杂志订阅、梦幻足球联赛访问。 |
如您所见,Google Play Billing以类似方式对待所有非订阅购买;用户购买商品,然后使用商品。使用商品后,会在应用中预配置该商品并记录使用情况。对于很可能是一次性购买的商品(如解锁新游戏关卡),您作为开发者可以选择将商品视为消费品或非消费品并引入逻辑来确保该商品只能购买一次。通过Amazon IAP,可在设计上将一次性购买(权利)与应用用户可以多次购买的购买项目(消费品)分离。
移植代码
本节将指导您将应用从Google Play Billing API移植到Amazon IAP API:
- 配置AndroidManifest.xml文件以支持Amazon IAP。
- 配置Appstore SDK
- 在应用中,实现在Google Play Billing和IAP之间进行协调的逻辑。
- 添加并实现Amazon IAP API。
- 测试应用。
配置AndroidManifest.xml文件
配置AndroidManifest.xml文件来为应用定义IAP ResponseReceiver。IAP ResponseReceiver确保应用截获来自亚马逊客户端的意图通信。如果您同时支持Google Play Billing和Amazon IAP,则无需删除与Google Play Billing相关的元素;IAP将忽略它们。
在AndroidManifest.xml文件中,为IAP ResponseReceiver
添加适当的<receiver>
标签。如果您的应用以Android 12或更高版本为目标,则必须在MainActivity
和ResponseReceiver
中显式地将android:exported
设置为true
,如下面的示例所示。
<application>
...
<activity android:name="com.amazon.sample.iap.entitlement.MainActivity"
android:label="@string/app_name" android:exported="true" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name="com.amazon.device.iap.ResponseReceiver" android:exported="true"
android:permission="com.amazon.inapp.purchasing.Permission.NOTIFY" >
<intent-filter>
<action
android:name="com.amazon.inapp.purchasing.NOTIFY" />
</intent-filter>
</receiver>
</application>
实现在Google Play Billing和IAP之间进行调解的逻辑
无论在哪里托管您的应用,均可以为其使用同一代码库。只需向您的应用添加逻辑,以确定应用是从亚马逊应用商店还是从Google Play下载的。根据用户从哪里下载的应用,运行适用于IAP或Google Play Billing的方法。
以下示例代码可确定程序包是从Google Play还是从亚马逊应用商店安装的:
PackageManager pkgManager = context.getPackageManager();
String installerPackageName = pkgManager.getInstallerPackageName(context.getPackageName());
if(installerPackageName.startsWith("com.amazon")) {
// 亚马逊
} else if ("com.android.vending".equals(installerPackageName)) {
// Google Play
}
添加并实现Amazon IAP API
Amazon IAP的工作原理与Google Play Billing基本类似。在您的代码中创建路径以实现IAP API时,您应该能够使用类似于Google Play的逻辑流,但需要考虑到不同的门类和方法名称。
下表将最常用的IAP方法映射到其Google Play等效方法:
PurchasingService方法 | PurchasingListener回调 | 响应对象 | Google Play等效类型 |
getUserData() |
onUserDataResponse() |
UserDataResponse |
无 |
getPurchaseUpdates() |
onPurchaseUpdatesResponse() |
PurchaseUpdatesResponse |
queryPurchases() |
getProductData() |
onProductDataResponse() |
ProductDataResponse |
getSkuDetails() |
purchase() |
onPurchaseResponse() |
PurchaseResponse |
launchBillingFlow() |
notifyFulfillment() |
无 | 无 | consumeAsync() |
测试应用
下载并安装App Tester工具来测试集成了Appstore SDK的应用。按照测试应用内购买(IAP)中的说明和链接安装和使用App Tester。
在本地测试应用后,您可以使用动态应用测试服务通过一组选定用户在实际生产环境中对应用进行Beta测试。