3

アプリ内購入に関する特定の状況について質問があります。

アプリでコインを購入するための消耗品があります。

  • Use は IAP で $.99 のコイン パックを購入します
  • サーバーにリクエストを送信して、購入を記録し、コインをアカウントに追加します(これらのコインは複数のデバイス間で共有され、サーバーがここで作業を行います)
  • IAP のトランザクションを完了する

問題は、サーバーへのリクエストがタイムアウトまたは失敗した場合に何をすべきかということです。ユーザーはお金を使いましたが、コインを受け取ることはありません。その時点でもう一度購入しようとすると、購入したものがダウンロードされていないというエラーが表示されます。

「トランザクションの復元」オプションを見たことがありますが、ここで適用する方法がわかりません。アプリのどこかにボタンがないようにしたいです。

このアプリはまだリリースされていないことを心配しないでください。また、このアプリは MonoTouch を使用して C# で記述されていますが、Objective-C の回答は大歓迎です。

4

2 に答える 2

1

私が行った方法は、失敗したトランザクションを NSUserDefaults に保存することです。そのため、アプリがバックグラウンドから来るたびに、失敗したトランザクションがないかユーザーのデフォルトをチェックしてから、再試行します。

それが正しい方法かどうかはわかりません。しかし、それを行うためのより良い方法があれば知りたいです。

于 2012-12-30T18:18:17.943 に答える
1

トランザクションの復元がそれを行います。購入を再度ダウンロードするだけです。5番目の投稿をご覧ください。

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 に答える