【发布时间】:2012-06-27 12:19:18
【问题描述】:
我对应用内购买的特定情况有疑问。
我们的应用中有一个用于购买硬币的消耗品:
- 使用通过 IAP 购买 0.99 美元的硬币包
- 我们向我们的服务器发送请求以记录购买并将硬币添加到他们的帐户(这些硬币在多个设备之间共享,我们的服务器在此处完成工作)
- 完成 IAP 交易
问题是,如果对我们服务器的请求超时或失败,我们应该怎么做?用户花了钱,但永远不会得到硬币。如果他们在那个时候再次尝试购买,它会给他们一个错误,说购买尚未下载。
我看到了“恢复交易”选项,但不知道如何在此处应用它。我宁愿在应用程序的某个地方没有按钮。
别担心这个应用程序还没有发布,这个应用程序是用 MonoTouch 用 C# 编写的,但是欢迎使用 Objective-C 的答案。
【问题讨论】:
-
也许会生成一个交易ID?如果应用程序检测到最近尝试了一笔交易并且您的服务器没有交易 ID 的记录,则将购买添加到服务器。从技术上讲,这将是“可破解的”,因此我建议使用种子随机数生成器,您可以验证它是由您创建的,而不是用户创建的。
-
是否有“苹果建议”的方式来解决这个问题?我想我可以保存购买信息并在应用打开时恢复。
-
感觉最近读到了这方面的东西,看看能不能找到。
-
Apple 建议使用 restoreCompletedTransactions 方法。我假设您在收到付款后存储交易已“完成”。
-
我相信 restoreCompletedTransactions 方法不会起作用,因为您不想每次在新设备上安装程序时都向用户提供信用。将购买信息保存在设备上的某个位置,并尝试尽快将请求重新发送到您的服务器。
标签: c# objective-c ios xamarin.ios in-app-purchase