适用于网页应用的IAP API方法
为了实现应用内购买,您的网页应用需为Amazon Services库提供一套响应处理程序。
应用内购买API主要由两部分组成:Amazon Services库(一个javascript库)和响应处理程序(由您实现并在初始化时将其作为参数传递给Amazon Services库)。
要包含该库,请为网页应用添加以下<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的商品数据
- 此方法适用于所有类型的可购买商品
- 您可随时从应用中调用此方法
- 参数skus是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。每个收据都包含recieptId,可通过Receipt Verification Service,用它来验证购买。收据是安全的,您可以仅凭借它向用户授权应用内容或功能的访问权限。作为开发者,您有权访问特定购买的userData、receiptId和SKU。每次返回收据数据时,会动态生成recieptId。它具有独特价值,可验证响应对象中返回的收据数据。且在任何给定时间,每个recieptId都可根据Receipt Verification Service成功验证。
Reset
请使用boolean reset参数,不要使用offset参数1.0。将reset设置为true可返回所有购买收据,设置为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()。如果您在处理收据过程中遇到临时错误,不要发送此状态