适用于 Web 应用的 IAP API 方法


适用于 Web 应用的 IAP API 方法

为了实现应用内购买,您的 Web 应用会为 Amazon Services 库提供一组响应处理程序。

应用内购买 API 包括两个主要组件 - Amazon Services 库(一个 javascript 库)和响应处理程序(您在初始化时实现并将其作为参数传递到 Amazon Services)。

要包括该库,请向您的 Web 应用添加以下 <script> 标签:

<script src="https://resources.amazonwebapps.com/v1/latest/Amazon-Web-App-API.min.js">
</script>

Amazon Services 库

Amazon Services 库包含以下方法:

  • AmazonIapV2.addListener(listener)
    • 在使用此类之前,您必须注册观察器
    • 需要在 onLoad() 生命周期方法中调用此方法
  • AmazonIapV2.purchase(sku)
    • 此方法用于发起特定 SKU 的购买
    • 此方法适用于所有类型的可购买项目
    • 显示的用户界面使用为 SKU 配置的信息来确定提供给客户的购买流程
    • 可随时从您的应用调用此方法
  • AmazonIapV2.getProductData(skus)
    • 此方法用于检索有关一组 SKU 的项目数据
    • 此方法适用于所有类型的可购买项目
    • 可随时从您的应用调用此方法
    • 参数 SKU 是 SKU 字符串数组
  • AmazonIapV2.getPurchaseUpdates(reset)
    • 此方法用于跨设备同步以前的购买和撤销的权利。
    • 在活动的 onStart() 或 onResume() 方法中实现 getPurchaseUpdates()。此外,为防止过度履行订单,请删除具有 receiptId 的重复收据。有关消费品、权利和订阅之间的差异的实现详细信息,请参阅以下内容。
    • 消费品​: getPurchaseUpdates() 方法返回消费品的未履行和已取消的购买收据。对于 IAP 2.0 中的 getPurchaseUpdatesResponse(),请注意以下事项:
      • 在应用中添加逻辑来处理从 getPurchaseUpdates() 调用返回的购买收据的履行。在您的应用打开时或任何其他时间,对应的 PurchaseUpdatesResponse() 回调可能会执行,因此在引用可能不可用的用户界面 (UI) 元素或对象时,请小心。
      • reset 设置为 true 可返回所有购买收据,将 reset 设置为 false 可返回自上次调用 getPurchaseUpdates() 之后进行的购买的收据。
    • 权利:onPurchaseUpdatesResponse() 返回权利和订阅的已取消和有效的购买收据。使用 receipt.isCanceled() 检查是否取消了购买。在 IAP 1.0 中,通过对 PurchaseUpdatesResponse 对象调用 getRevokedSkus() 来返回已取消的权利和订阅的收据。
    • 订阅: 与权利相同。
  • AmazonIapV2.getUserData()
    • 此方法用于检索当前登录用户的应用特定 ID
    • 需要在 onLoad() 方法中调用此方法
  • AmazonIapV2.notifyFulfillment(receiptId, fulfillmentResult)
    • IAP 2.0 提供了新的 API,可用于跟踪购买的履行状态。要跟踪购买的履行状态,请实现 notifyFulfillment() API。在履行项目后实现此调用来将购买状态发送给亚马逊。
    • 如果您没有在履行项目后使用 FULFILLED 状态调用 notifyFulfillment(),则交付将保持挂起。在这种情况下,将在下次您调用 getPurchaseUpdates() 时继续通过 onPurchaseUpdatesResponse() 回调进行交付尝试。​最终,如果亚马逊未收到使用此 API 对履行进行的明确确认,则可能会取消订单。
    • 如果您无法履行项目,请使用 UNAVAILABLE 状态。​您可以随时从您的应用中使用 UNAVAILABLE 状态调用​ notifyFulfillment()。
    • 此调用是不可变的。如果通过 notifyFulfillment() 将订单标记为 FULFILLED 或 UNAVAILABLE,则无法再次更改状态

ProductData

产品数据表示可购买项目,并提供了店面信息。最佳做法是,在让客户发起购买之前,检索可购买项目的价格并显示它。ProductData 类可用于访问本地化价格、标题和描述字符串。价格字符串将包括币种符号并根据区域设置将它设置为适当的格式。

PurchaseReceipt

为进行的每次购买提供 PurchaseReceipt。每个收据将包含可用于通过 Receipt Verification Service 验证购买的 recieptId。收据被视为安全的,您可以安全地仅依赖它来授权访问您的应用中的内容或功能。作为开发者,您有权访问特定购买的 userData、receiptId 和 SKU。recieptId 是在每次返回收据数据时动态生成的,并且是用于验证响应对象中返回的收据数据的唯一值。每个 recieptId 将在任何给定时间使用 Receipt Verification Service 成功验证。

Reset

使用 boolean reset 参数而非 offset 参数 1.0。将 reset 设置为 true 可返回所有购买收据,将 reset 设置为 false 可返回自上次调用 getPurchaseUpdates() 之后进行的购买的收据

响应对象

您通过 Amazon Services 库发出的每个调用将导致每个 addListener() 方法中指定的相应响应处理程序收到响应。其中每个响应都使用一个响应对象。下面将详细介绍这些响应:

  • GetUserDataResponse - 提供当前登录到亚马逊客户端的用户的特定于应用的 UserData
  • PurchaseUpdatesResponse - 提供自从将偏移传递到发起请求后的收据和不可用 SKU 的分页列表。返回一组无序的收据。
  • ProductDataResponse - 提供以 SKU 为键的项目数据。
  • PurchaseResponse - 提供在您的应用中发起的购买的状态。有关购买的任何错误都对开发者不透明,您无需在您的应用中实现任何错误处理方案;这由应用内购买 API 管理。

购买处理程序

您必须实现以下响应处理程序并在 addListener 方法中向 Amazon Services 库注册它们:

  • getUserDataResponse(userDataResponse) - 为响应 GetUserData 而调用。
  • getProductDataResponse(productDataResponse) - 为响应 getProductData 而调用。data.productDataMap 是以 SKU 为键的 productData 对象的散列表。
  • purchaseResponse(purchaseResponse) - 为报告购买操作的状态而调用。purchaseResponse.status 包含响应的状态。如果应用的上一个会话在传送购买响应之前关闭,则在应用的新会话注册购买处理程序时,将调用此函数。
  • getPurchaseUpdateResponse(data) - 使用已授予用户的权利列表调用。data.receipts 包含一个以 SKU 为键的散列表,其中包括已授予用户的 IAP 的收据。

处理收据

对每个收据实现已履行确认。在处理收据时,请先检查收据是否已取消。根据取消状态,执行以下操作之一:

  • 如果收据已取消,而项目尚未撤销,请撤销该项目。
  • 如果收据未取消:
    • 检查此 receiptId 是否已履行。如果已履行,请使用 FULFILLED 状态为 receiptId 调用 notifyFulfillment()。
    • 如果尚未履行,请履行收据。存储 receiptId 以跟踪已履行的项目,然后使用 FULFILLED 状态为 receiptId 调用 notifyFulfillment()。
    • 如果因项目适用于以前的游戏状态或游戏不支持该项目而无法履行,请使用状态​ UNAVAILABLE 为 receiptId 调用 notifyFulfillment()。如果您在收据处理过程中遇到临时错误,不要发送此状态