iOS应用程序内购买(耗材) - 服务器超时

时间:2012-06-27 12:19:18

标签: c# objective-c ios xamarin.ios in-app-purchase

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

我们的应用程序中有购买硬币的消耗品:

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

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

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

不要担心这个应用程序尚未发布,这个应用程序是用C#编写的MonoTouch,但欢迎Objective-C的答案。

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:1)

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

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