开发人员控制台

IAP常见问题解答


IAP常见问题解答

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

一般问题

问题1:“IAP”代表什么?

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

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

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

  • 用户的设备上必须安装亚马逊客户端应用。
  • 客户账户必须已启用一键式付款。
  • 一键式付款必须关联到一张来自受支持国家/地区之一的信用卡。
  • 一键式付款的默认地址必须是某个受支持国家/地区中的有效地址。
请参阅更改一键设置
问题3: 为了推广应用,是否可以从应用内直接链接到亚马逊客户端?

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

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

查看应用内购买概述中针对您所需技术的要求。对于针对Android的IAP开发,请查看IAP入门;对于针对网页应用的IAP开发,请查看适用于网页应用的IAP API

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

是的,要使应用在亚马逊应用商店中可用,您必须使用亚马逊应用内购买API进行所有合格购买。

问题6: 哪些符合条件的商品必须使用应用内购买API?

销售任何数字商品和服务,您的应用必须使用亚马逊应用内购买API。应用内购买可采用以下形式:

  • 消费品购买,如额外生命、额外关卡或游戏内货币。
  • 优质内容购买,如应用的无广告版本。它们通常不会过期。
  • 订阅购买,如音乐流媒体、杂志和云存储。
问题7: 我可以使用亚马逊应用内购买以外的付款方式销售哪些商品?

您必须使用亚马逊IAP API以外的付款方式来销售旨在供客户在应用外部获取或使用的实物商品和服务。使用信用卡/第三方支付服务可以购买以下商品或服务:

  • 服装、杂货、电子产品
  • 运输和配送服务
  • 机票、活动/电影票和礼品卡
  • 担保和其他类似物的任何清单
  • 任何保险产品
  • 对非营利组织的捐款
问题8: 有没有商品不能在亚马逊应用商店销售?

下类为禁止在亚马逊应用商店销售的商品:

  • 可从最终用户转让给其他用户和/或作为交换媒介流通的货币、积分、点数和其他商品/单位
  • 任何可以产生现金余额,使最终用户能够购买其他应用内产品的预付费账户
  • 彩票
  • 政府文件、身份证明、出生证明、护照和许可证
  • 未经授权和未获许可的产品
  • 违反此处所述亚马逊应用商店内容政策的内容
  • 侵犯最终用户隐私的商品
  • 受政府实体管制的任何产品或服务,如含酒精饮料、烟草、药物或枪支
  • 非法和潜在非法的产品
问题9: 如果应用使用谷歌的应用内购买技术,我是否可以在亚马逊设备上运行它?

不可以,谷歌的应用内购买技术需要访问Google Mobile Services,而它不能在亚马逊设备上运行。

问题10: 如何使应用内可购买商品可在所有国家/地区销售?

应用内可购买商品将自动在当前或将来您的应用可用的任何地方销售。默认情况下,亚马逊会自动在每个可销售市场将您IAP商品的基本标价转换当地市场货币,而客户将看到英文的IAP商品。

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

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

问题12: 如何更改IAP商品在单个市场中的价格?

登录到开发者门户并转到My Apps。选择应用,单击应用程序内商品,然后单击Availability and Pricing选项卡。在该选项卡上,选中I’ll set my own list prices(我将设置自己的标价)单选按钮,这会显示用于按照币种和市场编辑标价的选项。

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

我们将按照应用分发和服务协议中的规定向您支付版税。

问题14: 是否支持对应用内购买实现家长监护?

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

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

IAP API不提供此功能。但是,客户可通过使用家长监护功能来避免意外重复购买。

问题16: 要使用应用内购买,还有没有其他要求?

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

IAP API问题

问题1: 是否会对purchaseUpdateResponse()返回的收据排序?

不能保证会对返回的收据排序。但可以让您的应用对收据排序。

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

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

  • 对于消费品,仅当没有为购买收据调用notifyFulfillment()时,该收据才在onPurchaseUpdatesResponse()中列出。如果收据已履行,则亚马逊会将消费品购买交易视为已完成,并且不会在下次调用getPurchaseUpdates()时提供此收据。
  • 对于权利和订阅,购买收据将在onPurchaseUpdatesResponse()中列出。如果购买收据已取消或过期,则收据将具有有效的cancelDate属性。
问题3: UserIdReceiptIdmarketplace的字符串长度的建议值是多少?

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

  • UserId:​ 对UserId使用128个字符。 字符串可以包含字母和标点符号。因为UserId是加密字符串,所以您的加密技术可能会影响其长度。
  • ReceiptId:​ 对ReceiptId使用200个字符。 字符串可以包含字母和标点符号。
  • marketplace:​ marketplace值遵循ISO 3166-1-alpha-2标准,该标准将双字母代码映射到每个国家、领域或相关地区。对于较旧版本的亚马逊应用商店,实际的marketplace值可以为null
问题4: 是否需要调用notifyFulfillment()
需要,所有三种类型的应用内购买都需要调用notifyFulfillment()。此调用会跟踪购买的状态。对于消费品购买,请在履行购买后调用notifyFufillment()。如果您未调用notifyFulfillment(),则亚马逊客户端会将消费品购买收据作为onPurchaseUpdatesResponse()的一部分持续发送,因为在这种情况下,亚马逊会假定客户尚未收到他们购买的物品。

订阅商品问题​

问题1: 购买某个订阅SKU时,为什么返回了不同的SKU?

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

问题2: 为何父订阅SKU没有价格值?

价格信息与每个子SKU相关联,因为每个子SKU代表不同的订阅期。父SKU没有价格,因为价格因订阅时长而异。

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

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

问题4: 应用能否确定客户是否已启用自动续订选项?

不能。IAP API无法确定用户是启用还是禁用了自动续订。

问题5: 我是否能提高或降低订阅的价格?

如果您降低价格,新的和现有的订阅者将以新的价格支付(从他们的下一次付款开始)。如果您提高价格,则只有新订阅者以更高的价格支付。有关更多详细信息,请参阅更新订阅价格

问题6: 当客户购买提供免费试用的订阅时,免费试用期是订阅期的一部分还是在订阅期限以外?

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

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

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

问题8: receiptId值是否会在每个续订期更改?

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

  • 如果订阅是连续的且从未在任何时候取消过,则应用仅收到一个该订阅/客户的收据。
  • 如果订阅不是连续的,例如客户未自动续订,让订阅过期,然后一个月后再次订阅,则应用将收到多个收据。
问题9: purchaseDate值是表示最初购买日期还是每次续订的日期?

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

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

您不需要在适用于IAP的RVS v2.0中续订任何内容。IAP v1.0 RVS的purchaseToken请求参数没有等效参数。

问题11: 是否可以无需用户打开应用,直接在后端服务器上确定是否已续订订阅? 如果可以,怎么操作?

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

测试问题

问题1: 如何测试集成了IAP的应用?

在本地测试应用,然后在上线之前对应用进行Beta测试:

  1. 在将应用提交到亚马逊应用商店之前,请使用App Tester来测试应用。
  2. 在将应用提交到亚马逊应用商店之后,请使用动态应用测试服务在已上线生产环境中对应用进行Beta测试。
问题2: 什么是“共享密钥”,在哪里可以找到它?

“共享密钥”将IAP交易关联到特定供应商并验证您作为开发者是否有权验证交易收据。您可以在亚马逊应用商店中开发者账户的“Shared Key”(共享密钥)页面上找到共享密钥:https://developer.amazon.com/zh/sdk/shared-key.html

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

此应用有意不使用货币符号。价格条目也有意进行了格式化,不提供额外的信息。Product类以java.lang.String格式返回价格,它具有币种符号。要找到您的客户所在市场以及因此返回的币种符号,UserData类具有getMarketplace()方法,您可以调用该方法来获取ISO_3166-1市场代码。测试工具有意省略JSON字符串中的币种符号,以便您可以自己添加这些字符串。

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

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

亚马逊应用商店和提交过程问题

问题1: IAP商品是否需要特定资产,如图标或缩略图?

可以。​在开发者门户中,每个IAP商品都需要自己的一组资产,但资产不必是该商品所独有的。

  • 图标显示在应用内购买“Detail”(详情)页面和“Thank You”(感谢)确认页面上。
  • 缩略图不公开显示,但仍是每个商品所必需的。在开发者门户上传商品的所有资产。
问题2: 如何提交集成了IAP的应用?

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

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

在提交到亚马逊应用商店之前,在本地测试应用:

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

故障排除

问题1: 为什么我从亚马逊客户端收到“unknown error”(未知错误)消息,指示我重新下载应用?

此“unknown error”的最可能原因如下:

  • 应用未通过针对亚马逊客户端的数字版权管理(DRM)检查。如果您旁加载DRM封装的应用,则DRM检查将失败。对非DRM封装版本的应用执行内部测试。在DRM封装版本的应用上线之前,亚马逊会对其进行测试。
  • 亚马逊应用商店客户端应用在IAP购买流程中崩溃。要检查情况是否如此,请强制关闭亚马逊应用商店客户端应用,然后重新打开该应用以确认是否有效。