IAP 常见问题解答

IAP 常见问题解答

解答与应用内购买(IAP) API v2.0 相关的常见问题 (FAQ)。

一般问题

:“IAP”代表什么?

答:“IAP”是亚马逊的应用内购买功能的缩写。

:客户完成应用内购买需要什么?

答:针对应用内购买的客户要求与针对亚马逊客户端应用的客户要求是相同的:

  • 亚马逊客户端应用必须安装在用户的设备上。
  • 客户账户必须已启用一键支付。
  • 一键支付必须链接到来自受支持国家/地区之一的信用卡。
  • 一键支付的默认地址必须是受支持国家/地区之一中的有效地址。

请参阅更改一键设置

问:IAP API 是否针对用户意外重复购买提供了任何保护?

答:没有。亚马逊政策规定退款不适用于数字产品。如果用户有正当理由要求退款(例如,如果应用与其设备不兼容),则他们应该通过 Amazon.com 上的“帮助和客户服务”页面上的“联系我们”链接来联系亚马逊客服。

问:我是否可以从应用内直接链接到亚马逊客户端?

答:可以。有关如何从应用链接到亚马逊客户端的信息,请参阅链接到亚马逊客户端

:如何开始使用应用内购买 API?

答:使用应用内购买 API,您可以提供数字内容和订阅(如游戏币、扩展包、升级和杂志期刊)以供在应用内购买。

:如何使应用内购买在亚马逊设备上运行?

答:亚马逊的应用内购买 API 与亚马逊设备兼容。

:在我的应用中进行数字购买是否必须使用亚马逊应用内购买 API?

答:要使应用在亚马逊设备上可用,该应用必须使用亚马逊应用内购买 API 进行所有合格购买。

:我的应用使用 Google 的应用内购买技术。我是否可以使它在亚马逊设备上运行?

答:Google 的应用内购买技术需要访问 Google Mobile Services,Google Mobile Services 不能在亚马逊设备上运行。亚马逊提供了应用内购买 API,利用它,您可以轻松地提供数字内容和订阅以供在您的应用内购买。

:对于应用内购买,如何与亚马逊进行收入分成?

答:亚马逊向开发者支付市场标价 70% 的费用。

:如何使我的应用内可购买项目可在所有国家/地区销售?

答:您的应用内可购买项目将自动可在现在或将来可使用您的应用的地方销售。默认情况下,亚马逊会自动将您的 IAP 项目的基本标价转换为可销售它们的每个市场的本地货币,并且客户将看到英文的 IAP 项目。

:如果我不希望我的应用内可购买项目在特定市场上销售,该怎么办?

答:您必须指定应用本身在该特定市场中不可用。登录到开发者门户并转到 My Apps(我的应用)选项卡。在该选项卡中,选择应用,然后单击 Availability and Pricing(可用性和定价)选项卡。在此选项卡上,清除您不希望在其中销售您的应用的市场旁边的复选框。

:如何在单个市场中更改我的 IAP 项目的价格?

答:登录到开发者门户并转到 My Apps(我的应用)。选择应用,单击 In-App Items(应用内项目),然后单击 Availability and Pricing(可用性和定价)选项卡。在该选项卡上,选中 I’ll set my own list prices(我将设置自己的标价)的单选按钮,这会显示用于通过货币和市场编辑市场标价的选项。

:是否支持对应用内购买实施家长控制?

答:客户可以要求提供其亚马逊密码或 4 位 PIN 才能完成应用内购买。此设置位于亚马逊应用店面上的 Settings(设置)菜单下。

:使用应用内购买 API 可以销售什么,禁止销售什么?

答:您可以允许客户购买用于在应用内访问或使用的数字产品、内容或服务,如附加或增强功能、应用内工具、数据或媒体内容。

您不得允许客户购买任何其他项目,包括:

  • 要在应用本身之外使用的任何商品或服务(可在您的应用的内部和外部访问的数字内容除外)
  • 可从一个最终用户转让给其他最终用户和/或作为交换媒介流通的任何币种、积分、点或其他项目或单位
  • 创造最终用户可用于购买其他应用内产品的现金余额的预付账户
  • 任何礼品卡
  • 任何彩票
  • 任何活动门票,如体育赛事门票或音乐会门票
  • 任何非法和潜在非法产品
  • 任何政府文件、身份证明、出生证明、护照和许可证
  • 任何未经授权和无许可证的产品
  • 违反 Amazon Appstore 内容策略要求的任何内容
  • 侵犯最终用户的隐私的任何项目
  • 任何保险产品
  • 担保和其他类似物的任何清单
  • 由政府机构管制的任何产品或服务

:是否有任何其他要求适用于应用内购买的使用?

答:是的。除了遵守我们的有关您可以提供的应用内项目类型的程序策略外,您还必须确保您的应用中的应用内购买符合所有适用法律。其中一些法律限制您的应用内项目的促销方式。例如,欧盟的消费者保护法禁止直接鼓动儿童购买项目。它们可能还限制应用内项目的购买对应用的功能的影响方式。以下两个参考可帮助您了解欧盟消费者保护法如何适用于应用内购买:欧盟消费者保护合作 (CPC) 网络的位置英国竞争和市场管理局的有关在线和基于应用的游戏的原则

IAP API 问题

purchaseUpdateResponse() 返回的收据是否会进行排序?

:不会。不保证返回的收据会进行排序。您可以让您的应用对收据进行排序。

:如果购买交易在收到响应前中断怎么办?

:如果在收到响应前停电或网络连接断开,亚马逊服务器会将购买响应添加到队列中。当电力和网络连接恢复后,亚马逊客户端会从队列中检索购买响应。通过在每次应用启动时发送 getPurchaseUpdates() 调用来检查从亚马逊客户端发送的购买收据。排队的收据的行为会因购买类型而略有不同。

  • 对于消费品,如果没有为购买收据调用 notifyFulfillment(),则该收据将仅列在 onPurchaseUpdatesResponse() 中。如果收据已履行,则亚马逊会将消费品购买交易视为已完成,并且不会在下次调用 getPurchaseUpdates() 时提供此收据。
  • 对于权利和订阅,购买收据将列在 onPurchaseUpdatesResponse() 中。如果购买收据已取消或过期,则收据将具有有效的 cancelDate 属性。

UserIdReceiptIdmarketplace 的字符串长度的建议值是多少?

:如果您在数据库中为这些参数定义了空间,则它们具有以下建议长度:

  • UserId:对 UserId 使用 128 个字符。字符串可以包含字母数字值和标点符号。因为 UserId 是加密字符串,所以其长度可能会受加密技术影响。
  • ReceiptId:对 ReceiptId 使用 200 个字符。字符串可以包含字母数字值和标点符号。
  • marketplacemarketplace 值遵循 ISO 3166-1-alpha-2 标准,其中使用两个字母表示国家/地区名称。对于较旧版本的 Amazon Appstore,实际的 marketplace 值可以为 null

:是否需要 notifyFulfillment() 调用?
:需要,所有三种类型的应用内购买都需要 notifyFulfillment() 调用。此调用会跟踪购买的状态。

请注意,对于消费品购买,请在履行购买后调用 notifyFufillment()。如果您未调用 notifyFulfillment(),则亚马逊客户端会将消费品购买收据作为 onPurchaseUpdatesResponse() 的一部分持续发送,因为在这种情况下,亚马逊会假定客户尚未收到他们购买的物品。

订阅项目问题​

:用户是否可以从其移动设备管理订阅?

:可以。用户可以通过亚马逊客户端和亚马逊网站来管理其订阅。

:我的应用是否有办法确定客户是否已启用自动续订选项?

:没办法。IAP API 没有包括任何可确定用户是启用还是禁用了自动续订的方法。

:当客户通过免费试用购买订阅时,免费试用期是订阅期限的一部分还是对订阅期限的附加?

:免费试用期是对客户选择的订阅期限的附加。免费试用期结束后,客户将开始他们的订阅期限。例如,如果客户选择月度订阅,并且应用提供了 14 天的免费试用,则他们具有 14 天免费订阅。14 天免费试用期过后,月度订阅期限将开始,客户将需要付费。如果客户在 14 天免费试用期结束之前禁用了自动续订,则订阅会结束,并且不会向客户收费。

:当我对某个订阅 SKU 发起购买时,为什么返回了不同的 SKU?

:订阅由表示产品的不可购买的父 SKU 和表示订阅期限的一个或多个子 SKU 组成。此设置可防止用户购买同一产品的多个订阅。父 SKU 是购买响应中返回的 SKU。子 SKU 发起购买。由于订阅期限和费用由亚马逊处理,您的应用只需检查订阅是否有效。

问:当客户购买订阅后,他们能否取消订阅并获得按比例计算的退款?

:不能。在购买某个期限的订阅后,订阅在该期限内是有效的,无法取消。客户可以选择退出自动续订,但不会取消已购买的订阅。如果用户有正当理由要求按比例退款,他们应通过 Amazon.com 上的“联系我们”链接来联系亚马逊客服。

:每个续订期的 receiptId 值是否都会更改?

receiptId 是否更改取决于客户的订阅是否连续:

  • 如果订阅是连续的且从未在任何时候取消,则应用将仅收到该订阅/客户的一个收据。
  • 如果订阅不是连续的,例如客户未自动续订,让订阅终止,然后一个月后再次订阅,则应用将收到多个收据。

purchaseDate 值是表示最初购买日期还是每个续订的购买?

purchaseDate 表示最初购买日期,而非后续续订的 purchaseDate

:在 IAP v2.0 中是否仍然需要调用 RVS 上的续订终端节点?

:不需要。适用于 IAP v2.0 的 RVS 仅公开名为 verifyReceiptId 的服务。您无需在请求参数(如 IAP v1.0 RVS 的 purchaseToken)中续订任何内容。

:我们是否可以在我们的后端服务器上确定是否已续订订阅而无需用户打开应用?如果可以,怎么操作?

:如果客户已明确续订订阅,您将无法如此。您将只知道订阅是有效的还是已取消。当订阅不再有效时,亚马逊会提供 cancelDate。如果 cancelDate 为 null,则客户的订阅仍有效。如果客户取消然后再次续订,则应用将收到多个收据。取消的第一个订阅将具有 cancelDate,新订阅将具有 purchaseDate 和 null cancelDate

测试问题

:我应该如何测试集成了 IAP 的应用?

:在本地测试您的应用,然后在推出之前对您的应用进行 beta 测试:

  1. 在将您的应用提交到 Amazon Appstore 之前,请使用 App Tester 来测试您的应用。
  2. 在将您的应用提交到 Amazon Appstore 之后,请使用 Live App Testing 服务在已上线生产环境中对您的应用进行 beta 测试。

:什么是“共享密钥”,在哪里找到它?

:“共享密钥”将 IAP 交易连接到特定供应商并验证作为开发者的您是否有权验证交易的收据。

共享密钥可在 Amazon Appstore 中您的开发者账户的“Shared Key”(共享密钥)页面上找到:https://developer.amazon.com/sdk/shared-key.html

:我尝试对示例应用使用 Amazon App Tester,但发现币种缺失。我还发现价格条目的下拉列表中没有任何其他信息。这是有意的吗?

:此应用的币种符号是有意缺失的。价格条目的格式也是有意设置为不包含其他信息。Product 类以 java.lang.String 格式返回价格,它具有币种符号。为发现您的客户所在的市场以及因此返回的币种符号,UserData 类具有 getMarketplace() 方法,可以调用该方法来获取 ISO_3166-1 市场代码。Amazon 的测试工具有意省略 JSON 字符串中的币种符号,以便您可以自己添加这些字符串。

:当我选择一个条目时,它总是显示订阅类型为“月度订阅”,即使此条目是“季度订阅”也是如此。为什么会发生这种情况?

:此问题是 App Tester 的一个已知限制,不影响功能。

Amazon Appstore 和提交过程问题

:IAP 项目是否需要特定资产,如图标或缩略图?

:是的。在亚马逊应用和游戏开发者门户中,每个 IAP 项目都需要自己的一组资产,但资产无需是该项目所独有的。

  • 图标显示在应用内购买“Detail”(详情)页面和“Thank You”(感谢)确认页面上。
  • 缩略图未公开显示,但仍是每个项目所必需的。

将项目的所有资产上传到亚马逊应用和游戏开发者门户。

:如何提交我的集成了 IAP 的应用?

:在测试了您的应用后,可以通过开发者门户上传并提交它。

:如何为我的集成了 IAP 的应用加快应用审批过程?

:在提交到 Amazon Appstore 之前,在本地测试您的应用:

  1. 使用 App Tester 来测试您的应用。
  2. 在亚马逊应用和游戏开发者门户上的“Submission”(提交)选项卡的 Testing Notes(测试注释)区域中,描述如何对您的应用执行应用内购买。

疑难解答

:我从亚马逊客户端收到“unknown error”(未知错误)消息,指示我重新下载我的应用。这是怎么回事?

:此“unknown error”(未知错误)最有可能的原因是应用未通过针对亚马逊客户端的数字版权管理 (DRM) 检查。如果您旁加载 DRM 包装的应用,则 DRM 检查将失败。对非 DRM 包装版本的应用执行您的内部测试。亚马逊将先对 DRM 包装版本的应用进行测试,然后再推出它。

此错误另一个可能的原因是 Amazon Appstore 客户端应用在 IAP 购买流程中崩溃。要检查是否如此,请强制关闭 Amazon Appstore 客户端应用,然后重新打开该应用来重新确定该应用是否有效。