3

我对应用内购买的特定情况有疑问。

我们的应用中有一个用于购买硬币的消耗品:

  • 使用通过 IAP 购买 0.99 美元的硬币包
  • 我们向我们的服务器发送请求以记录购买并将硬币添加到他们的帐户(这些硬币在多个设备之间共享,我们的服务器在这里完成工作)
  • 完成 IAP 交易

问题是,如果对我们服务器的请求超时或失败,我们应该怎么做?用户花了钱,但永远不会得到硬币。如果他们在那时再次尝试购买,它会给他们一个错误,说购买尚未下载。

我看到了“恢复交易”选项,但不知道如何在这里应用它。我宁愿在应用程序的某个地方没有按钮。

别担心这个应用程序还没有发布,这个应用程序是用 MonoTouch 用 C# 编写的,但是欢迎使用 Objective-C 的答案。

4

2 回答 2

1

我所做的方法是在 NSUserDefaults 中保存失败的事务。因此,每次应用程序来自后台时,它都会检查任何失败交易的用户默认设置,然后再次重试。

我不确定它是否正确。但是,我想知道是否有更好的方法来做到这一点。

于 2012-12-30T18:18:17.943 回答
1

恢复事务就可以了。它只是再次重新下载购买。看看这里的第五个帖子:

http://monogame.codeplex.com/discussions/359109

这是实现它的代码:

InAppPurchaseManager > MySKPaymentObserver:

    public override void PaymentQueueRestoreCompletedTransactionsFinished (SKPaymentQueue queue)
        {
            foreach(SKPaymentTransaction transaction in queue.Transactions)
            {

                #if DEBUG
                Console.WriteLine("Restoring Transaction " + transaction.Payment.ProductIdentifier);
                #endif
                theManager.restoreTransaction(transaction);
            }
        }

以下是如何在游戏中调用代码:

 app = new InAppPurchaseManager ();
 app.LoadStore();
 SKPaymentQueue.DefaultQueue.RestoreCompletedTransactions();
于 2012-07-08T15:25:49.237 回答