设置附加订阅
以下步骤向您展示如何设置、集成和测试附加订阅。
先决条件
要使用附加订阅,必须具备以下条件:
-
在开发者控制台中激活了附加订阅。
此功能仅面向部分合作伙伴开放,因此必须由您的亚马逊代表为您激活。
-
亚马逊应用商店SDK版本3.0.9或更高版本。
步骤1: 设置附加订阅
在亚马逊开发者控制台中,附加订阅的设置方法与基础订阅类似。有关如何设置新订阅的说明,请参阅新建应用内商品。
设置附加订阅
- 登录开发者控制台,然后在导航栏中选择我的应用。
- 在应用列表中找到您的应用,在应用内商品列中,选择<数量> 项目。
-
在“应用内商品”屏幕上,选择添加新的IAP > Add an add-on subscription(添加附加订阅)。

-
要定制附加订阅购买体验和订阅管理体验,请上传附加订阅图标和背景图片。
-
在Map add-on to live subscription(将附加映射至上线订阅)部分中,单击Map add-on to live subscription(将附加映射至上线订阅)。

在此处提供信息,可以定义附加订阅与基础订阅之间的关系。
-
请填写所有必填字段。请务必使用最精细的级别来定义附加与基础订阅之间的关系。例如,可以在基础订阅期限级别上定义该关系。
在您提供所有必需的信息之前,提交IAP按钮将一直处于非活动状态。
-
填写所有必填字段后,选择是仅将附加订阅提交至动态应用测试 (LAT),还是同时提交至LAT和当前上线应用。
有关更多详细信息,请参阅提交新的或更新后的应用内商品。
注意: 在将更改推广到上线应用之前,可考虑先使用LAT来测试您的附加订阅。使用LAT,您可以在向所有客户提供附加订阅之前对其进行测试。
步骤2: 在应用中集成附加订阅
(采用测试模式或上线模式)设置并发布附加订阅后,必须升级应用中的亚马逊应用商店SDK集成。
在升级SDK集成之前,请查阅以下附加集成摘要表。
| 集成组件 | 类别 | 变更摘要 |
|---|---|---|
getUserData() |
SDK API | 无变化。 |
getProductData() |
SDK API | 经过增强,可发送给定SKU的附加关系。有关详细信息,请参阅实现getProductData() 方法以在应用中显示附加订阅。 |
getPurchaseUpdates() |
SDK API | 无变化。 |
purchase() |
SDK API | 增强了对附加购买的验证。有关详细信息,请参阅在应用中实现用于购买附加订阅的代码。 |
modifySubscription() |
SDK API | 无变化。 |
notifyFulfillment() |
SDK API | 无变化。 |
verifyReceiptId REST API操作 |
收据验证服务 (RVS) | 增强了响应能力,可返回给定附加收据的基础收据。有关详细信息,请参阅处理和验证附加订阅购买。 |
| 应用内购买 (IAP) 实时通知 | 通知 | 无变化。 |
本指南专门介绍如何在应用中集成应用内购买 (IAP) API以支持附加订阅。有关如何与IAP API完全集成的详尽步骤,请参阅在应用内集成IAP API。
处理购买更新
附加订阅收据的处理方式与常规订阅收据相同。getPurchaseUpdates() 方法不进行任何更改即可支持附加订阅。调用getPurchaseUpdates() 时,响应返回附加收据的方式与基础收据相同。有关getPurchaseUpdates() 方法的详细实现方式,请参阅IAP实现文档中的实现getPurchaseUpdates方法。
实现getProductData() 方法以在应用中显示附加订阅
要实现getProductData() 方法,请参阅IAP实现文档中的实现getProductData方法。getProductData() 方法的请求参数没有变化。但是,响应还包含两个额外的字段,用于映射附加SKU和基础订阅SKU。
| 字段 | 数据类型 | 描述 |
|---|---|---|
addons |
List<String> | 符合给定基础期限SKU条件的附加期限SKU列表。 |
bases |
List<String> | 与给定附加期限SKU相关联的基础期限SKU列表。 |
getProductData() 方法可处理以下订阅关系场景:
- 当您提供基础订阅的期限SKU时:
- 在
addons字段下返回相关附加订阅期限SKU列表。
- 在
- 当您提供附加订阅的期限SKU时:
- 在
bases字段下返回兼容基础订阅期限SKU列表。
- 在
这些关系反映了您在开发者控制台中建立的映射,其中特定附加订阅期限与兼容基础订阅期限相关联。
使用此功能,您可以:
- 仅向拥有特定基础订阅的客户显示相关附加订阅。
- 确保附加订阅仅与其兼容基础订阅一起提供。
- 在应用中保持适当的订阅依赖关系。
在应用中实现用于购买附加订阅的代码
要实现附加订阅的购买,请使用purchase() 方法并将附加期限SKU作为参数进行传递。附加订阅购买以现有IAP购买流程为基础,并包含额外的验证,用于验证客户的基础订阅是否处于有效状态。如果客户的基础订阅处于无效状态,则PurchaseResponse.RequestStatus的值为INACTIVE_BASE_SUBSCRIPTION。如果附加订阅购买成功,则其状态值为SUCCESSFUL。现有请求和响应结构没有变化。
以下示例展示了一个购买请求和响应。
示例请求
public void onBuyOrangeClick(final View view) {
final RequestId requestId = PurchasingService.purchase("com.example.app.monthly");
Log.d(TAG, "onBuyOrangeClick: requestId (" + requestId + ")");
}
示例响应
public void onPurchaseResponse(final PurchaseResponse response) {
switch (status) {
// ...
case SUCCESSFUL:
final Receipt receipt = response.getReceipt();
iapManager.setAmazonUserId(response.getUserData().getUserId(), response.getUserData().getMarketplace());
Log.d(TAG, "onPurchaseResponse: receipt json:" + receipt.toJSON());
iapManager.handlePurchase(receipt, response.getUserData());
iapManager.refresh();
break;
case ALREADY_PURCHASED:
// 客户已经拥有购买商品的有效权利。
// 应用和亚马逊应用商店不同步。重新同步亚马逊应用商店中的所有购买。
PurchasingService.getPurchaseUpdates(true);
break;
case INVALID_SKU:
Log.d(TAG, "onPurchaseResponse:无效SKU!onProductDataResponse应已禁用购买按钮。");
final Set<String> unavailableSkus = new HashSet<String>();
unavailableSkus.add(response.getReceipt().getSku());
iapManager.disablePurchaseForSkus(unavailableSkus);
break;
case FAILED:
// 客户在完成购买旅程之前退出
Log.d(TAG, "onPurchaseResponse:失败,因此从本地储存中删除购买请求");
iapManager.showPurchaseFailedMessage(response.getReceipt().getSku());
break;
case NOT_SUPPORTED:
Log.d(TAG, "onPurchaseResponse:失败,因此从本地储存中删除购买请求");
iapManager.showPurchaseFailedMessage(response.getReceipt().getSku());
// 设备不支持IAP功能。
// 对此设备禁用应用内购买。
iapManager.disableAllPurchases();
break;
case INACTIVE_BASE_SUBSCRIPTION:
Log.d(TAG, "onPurchaseResponse:失败,因此从本地储存中删除购买请求");
// 开发者可以根据实现需求来自定义逻辑
break;
}
}
处理购买收据并履行购买
附加收据的处理方法与常规订阅收据相同。有关如何处理附加收据并履行购买的详细实现方法,请参阅IAP实现文档中的处理购买收据并履行购买。
在履行商品之前,让后端服务器通过亚马逊收据验证服务 (RVS) 验证receiptId,从而验证购买所产生的附加收据。有关如何使用RVS验证附加收据的详细信息,请参阅处理和验证附加订阅购买。
处理和验证附加订阅购买
对于附加订阅,遵循与常规订阅相同的RVS实现流程。有关收据处理和订阅验证的详细说明,请参阅收据验证服务概述。附加订阅的请求参数保持不变。当您处理附加订阅收据时,RVS响应会包含baseReceipts字段。此字段包含关联的基础订阅收据。在授予对附加和基础订阅这两种内容的访问权限之前,使用baseReceipts中列出的值来确认基础订阅的有效性。
| 字段 | 数据类型 | 描述 |
|---|---|---|
baseReceipts |
List<String> | 与附加订阅对应的基础收据ID列表。 |
将履行结果发送给亚马逊并向用户授予商品
向客户授予订阅内容后,调用notifyFulfillment() 以获取附加订阅收据,其方法与基础订阅收据的获取方法相同。有关如何将履行结果发送给亚马逊的详细实现方法,请参阅IAP实现文档中的处理购买收据并履行购买。
步骤3: 测试附加订阅
亚马逊提供了多种工具和服务来帮助您测试IAP实现。要了解相关工具以及查看建议的应用测试工作流程,请参阅IAP测试概述。
适用于附加订阅的App Tester
要为应用设置和配置App Tester,请参阅App Tester用户指南。App Tester使用JavaScript对象表示法 (JSON) 文件中存储的数据响应API调用。该文件包含IAP商品的购买数据。您可以通过开发者控制台自动创建JSON文件。
设置App Tester
- 导出IAP商品的JSON文件:
- 在开发者控制台的应用主页面中,单击应用内商品选项卡以查看应用当前的应用内商品。
- 选择导出多个IAP > JSON,然后确认要导出商品。
- 单击链接下载文件。
- 要启用附加订阅测试,请在生成的JSON文件中手动添加
addons和bases字段。
在配置App Tester之前,必须手动添加这些字段。addons字段表示适用于相应基础期限的附加订阅列表,bases字段定义了与附加订阅相关联的基础期限列表。
测试getProductData()
- 验证您用于App Tester的JSON文件是否包含要测试的SKU和产品定义。
- 在IAP API Response Settings(IAP API响应设置)部分中,使用GetProductData API旁边的下拉菜单:
- 要测试
SUCCESSFUL响应,请将首选项设置为Default或SUCCESSFUL。 - 要测试
FAILED响应,请将首选项设置为FAILED。
- 要测试
- 调用
getProductData()。 - 使用
onGetProductDataResponse回调来处理响应。 - 检查是否有
addons或bases额外字段。
示例JSON响应
"your_item_SKU" : {
...
"subscriptionParent": "com.amazon.subs.gold",
"addons": ["com.example.iap.subscription.mymagazine.gold"],
"bases": ["com.example.iap.subscription.mymagazine.silver"]
...
}
测试purchase()
- 验证您用于App Tester的JSON文件是否包含要测试的SKU和产品定义。
- 在IAP API Response Settings部分中,使用Purchase API旁边的下拉菜单:
- 要测试
SUCCESSFUL响应,请将首选项设置为Default或SUCCESSFUL。 - 如果基础订阅处于无效状态,要测试附加订阅购买,请将首选项设置为
INACTIVE_BASE_SUBSCRIPTION。
- 要测试
- 调用
purchase()方法。 -
使用
onPurchaseResponse回调来处理响应。成功购买的内容会显示在App Tester的Manage Transactions(管理交易)选项卡上。
测试附加订阅的RVS响应
亚马逊提供了收据验证服务 (RVS),可用于从您的后端服务器验证购买。要了解有关此服务的更多信息,请参阅收据验证服务概述。
使用RVS云沙盒验证App Tester生成的收据。有关详细信息,请参阅使用RVS云沙盒。验证附加收据的RVS响应是否包含baseReceipts字段,该字段应与所映射基础订阅的receiptId值相匹配。
使用动态应用测试来测试附加订阅
和其他IAP商品一样,可以使用动态应用测试 (LAT) 来测试附加订阅。在向客户提供附加订阅之前,可以先在LAT环境中测试购买用例。
有关用于测试附加订阅的用例,请参阅下表。
| 用例 | 预期结果 |
|---|---|
| 无需进行购买即可查看应用中提供的订阅商品。 此用例用于验证 getProductData() 方法。 |
计划选取器页面列出所有IAP商品,包括您提供的基础订阅和附加订阅。 |
| 在购买基础订阅后购买附加订阅。 | 附加订阅购买成功完成。您收到一封确认电子邮件。 |
| 无需基础订阅即可购买附加订阅。 | 购买失败并显示错误。 |
| 购买附加订阅后,登录应用并查看附加内容。 此用例用于验证 getPurchaseUpdate() 方法和RVS响应。 |
您可以查看附加内容。 |
| 在亚马逊网站上通过关闭自动续订来取消附加订阅。 为了缩短取消操作的等待时间,可考虑使用加速订阅进行测试。 |
在“Your Subscription”(您的订阅)页面上,订阅状态为“will not renew automatically”(不会自动续订)。 亚马逊通过实时通知 (RTN) 向您发送有关取消的通知。 |
| 取消与有效附加订阅关联的基础订阅。 为了缩短取消操作的等待时间,可考虑使用加速订阅进行测试。 |
在“Your Subscription”页面上,基础订阅状态为“will not renew automatically”。 如果使用加速订阅,则15分钟后,基础订阅和附加订阅的订阅状态都会显示为“expired”(已过期)。亚马逊通过实时通知 (RTN) 向您发送有关取消的通知。 |
相关主题
Last updated: 2026年5月20日

