如何使用 Amazon IAP API 验证购买

Posted

技术标签:

【中文标题】如何使用 Amazon IAP API 验证购买【英文标题】:How can I validate purchases with Amazon IAP API 【发布时间】:2013-06-11 16:14:13 【问题描述】:

ios 应用程序中,我通常通过将 Apple 的收据列表与我自己处理购买时添加到本地的收据列表进行比较来验证购买是否成功并由我的应用程序处理。这可以防止购买期间应用程序崩溃、错误等可能导致事情不同步的事情。我正在尝试对亚马逊做类似的事情。 我在亚马逊文档中反复遇到过这样的关于购买验证/恢复的声明:

It is possible for a purchase transaction to have more than one Purchase Token representation, so they should not be used as transaction IDs.

这是一个巨大的帮助,因为我认为正好相反。不幸的是,我还没有找到其余的想法:“可以在此处找到事务ID:...”。我开始认为他们的交易不提供稳定的 ID...!请告诉我我缺少什么,或者,如果它真的不存在,我该如何防范我上面提到的问题?

【问题讨论】:

【参考方案1】:

Amazon IAP 下的initialPurchaseUpdatesRequest 调用采用偏移参数,该参数是还原点的永久标识符。每次启动时,您都会从您看到的最后一个偏移量(或 Offset.BEGINNING 第一次)开始发出initialPurchaseUpdatesRequest。当响应到来时,您将保存响应的偏移量以供下次启动。这样,任何新的但未记录的销售(由于错误或多个设备问题)都将在下一次启动时被捕获。一个很小的影响是,您实际上可以收到两次购买通知 - 一次是在发生购买时,一次是在下一次 onPurchaseUpdatesResponse 时。

像往常一样,您还可以让用户手动请求“恢复购买”,该请求会发出带有 Offset.BEGINNING 参数的initialPurchaseUpdatesRequest,以防万一一切都失败了。

附言。实际的收据验证应通过使用来自恢复或购买响应的收据值从您自己的服务器调用 Amazon Web 服务来执行。

【讨论】:

【参考方案2】:

使用当前的 Amazon IAP api,通过 PurchaseResponse 对象中的“requestId”跟踪您是否已完成 IAP 项目。这个“requestId”可以用作一种伪事务ID。您应该将此 requestId 保存到服务器或设备的本地存储中。

有关详细信息,请参阅下面的快速入门链接: https://developer.amazon.com/appsandservices/apis/earn/in-app-purchasing/docs/quick-start#7

【讨论】:

以上是关于如何使用 Amazon IAP API 验证购买的主要内容,如果未能解决你的问题,请参考以下文章

Amazon IAP - 未调用 PurchaseObserver 回调(onSdkAvailable 除外)

如何为Amazon IAP设置ProGuard?

如何为 Amazon IAP 设置 ProGuard?

如何处理 IAP 的 transactionReceipt 弃用?

ios IAP 内购验证

如何在 Amazon API 中恢复购买?