开发者控制台

应用内购买常见问题解答

应用内购买常见问题解答

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

一般问题

问1:“IAP”代表什么?

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

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

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

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

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

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

请查看应用内购买概述中的要求。对于针对Android的IAP开发,您可以在Appstore SDK亚马逊应用商店计费兼容性SDK之间进行选择。有关这些解决方案的更多信息,请参阅应用内购买解决方案问题。有关网页应用的IAP开发,请查看适用于网页应用的IAP API;对于Unity,请参阅适用于Unity的Appstore SDK插件

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

是的,为了可以在亚马逊应用商店中提供该应用,必须对所有合格购买使用其中一种亚马逊应用内购买解决方案。

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

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

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

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

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

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

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

Google的应用内购买技术需要访问Google移动服务,而它不能在亚马逊设备上运行。但是,要将您的应用移植到亚马逊应用商店,可以使用亚马逊应用商店计费兼容性SDK,其使用与Google Play Billing相同的API签名。

问10: 如何在所有国家/地区提供应用内可购买商品?

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

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

您必须指定不在该特定市场提供应用。登录到开发者门户并转到My Apps(我的应用)选项卡。转到该选项卡后,选择相应的应用,然后转到将您的应用定向屏幕。在销售国家(地区)部分中,取消选中您不希望在其中销售您应用的市场旁边的复选框。

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

登录开发者控制台并转到我的应用程序。选择应用,单击应用程序内商品,然后转到亚马逊应用商店详情屏幕。在定价部分,选择I will set my own list prices(我将设置自己的标价)单选按钮,这会显示用于按照币种和市场编辑标价的选项。

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

我们将按照亚马逊开发者服务协议(仅提供英文版)的规定向您支付版税。

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

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

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

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

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

是。​除了遵守我们关于所提供应用程序内商品类型的程序策略外,您还必须确保您应用中的应用内购买符合所有适用法律(例如,您如何推广应用程序内商品或购买应用程序内商品对应用的功能有何影响)。

应用内购买解决方案问题

问1: 亚马逊应用商店为应用内购买提供哪些解决方案?

亚马逊提供亚马逊应用商店计费兼容性SDKAppstore SDK和IAP v2.0 SDK。对于Unity,提供了适用于Unity的Appstore SDK插件和适用于Unity的IAP v2.0插件。IAP v2.0处于逐渐弃用状态,不建议使用。

问2: Appstore SDK中的IAP和亚马逊应用商店计费兼容性SDK之间有什么区别? 为什么我应选择其中一个而不是另一个?

亚马逊应用商店计费兼容性SDK使用与Google Play Billing相同的API签名。如果您要从Google Play移植应用,可以考虑使用亚马逊应用商店计费兼容性SDK。Appstore SDK的API签名与Google Play Billing不同,但支持的功能更多,例如待定购买、促销定价和收据验证。如果您的应用需要这些功能,可考虑使用Appstore SDK。如需完整比较,请参阅亚马逊IAP解决方案对比

问3: 我是否可以从Appstore SDK IAP迁移到亚马逊应用商店计费兼容性SDK?

是的,您可以从Appstore SDK IAP迁移到亚马逊应用商店计费兼容性SDK。借助亚马逊应用商店计费兼容性SDK,您可以减少维护并缩短发布周期。首先,查看亚马逊IAP解决方案对比,确保您的应用的用例兼容。您可以重复使用您在开发者控制台中为Appstore SDK创建的相同IAP配置和SKU。报告的工作方式与Appstore SDK相同。

问4: 如何测试集成?

您可以使用Amazon App Tester动态应用测试 (LAT) 来测试Appstore SDK IAP。对于亚马逊应用商店计费兼容性SDK,您只能使用LAT进行测试。您可以对这两个SDK使用收据验证服务实时通知

问5: 我能否将相同的公有密钥用于Appstore SDK和亚马逊应用商店计费兼容性SDK?

亚马逊将相同的公有密钥用于Appstore SDK和亚马逊应用商店计费兼容性SDK。在SDK之间迁移时,您无需进行太多更改。

亚马逊应用商店IAP API问题

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

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

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

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

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

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

  • UserId: 对UserId使用128个字符。 字符串可以包含字母和标点符号。因为UserId是加密字符串,所以您的加密技术可能会影响其长度。
  • ReceiptId: 对ReceiptId使用200个字符。 字符串可以包含字母和标点符号。
  • marketplacemarketplace值遵循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: 当客户购买订阅后,他们能否取消订阅并获得按比例计算的退款?

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

问7: 是否会针对每个续订期更改receiptId值?

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

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

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

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

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

免费试用问题

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

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

问2: 客户在体验过免费试用之后是否可以另外享受一次免费试用?
否。每个订阅产品只能享受一次免费试用。客户开始免费试用后,他们将不再有资格享受同一订阅的免费试用。
问3: 如果客户获得14天免费试用后仅享受了7天,然后就取消了订阅,该客户能否再次订阅以享受另外7天的免费试用?
免费试用开始之后,客户不再有资格享受相同的免费试用,即便他们之前没有用完整个免费试用期也是如此。
问4: 客户是否可以享受同一订阅产品的免费试用和促销定价?
是。​如果您提供免费试用和促销定价,并且客户有资格同时享受这两种优惠,则促销价格将在客户的免费试用结束后对其生效。

亚马逊硬币问题

客户可以使用亚马逊硬币进行应用内购买。以下是关于如何使用亚马逊硬币进行应用内购买的常见问题。

问1: 我需要做什么才能将我的应用与亚马逊硬币集成?
无需操作。将您的应用与亚马逊硬币集成没有额外的编码要求。
问2: 由于可以打折购买亚马逊硬币,IAP API中是否有指示器能反映使用亚马逊硬币购买应用内商品时按当地货币计的实际支出额?
否。无论采用何种支付方式,都没有可用的API来指示个人为交易支付的金额。
问3: 在哪里可以查看亚马逊硬币条款和条件?
每个市场有单独的条款和条件。有关详细信息,请参阅亚马逊硬币条款

测试问题

问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格式返回Price,它带有币种符号。为了发现客户所在的市场,并且由于返回的币种符号的原因,UserData类具有getMarketplace()方法,您可以调用该方法来获取ISO_3166-1市场代码。测试工具有意省略JSON字符串中的币种符号,以便您可以自己添加这些字符串。

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

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

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

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

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

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

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

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

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

  1. 使用App Tester来测试应用。
  2. 在开发者控制台的确认并提交屏幕上的测试说明部分中,描述如何对您的应用执行应用内购买。

故障排除

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

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

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

Last updated: 2024年5月22日