2

アプリ内購入を通じてサブスクリプションを処理する必要がある iPhone アプリを構築しています。アプリでAppleからレシートを受け取ったら、レシートを自分のサーバーに保存し、自分のサーバーでもAppleサーバーでレシートを確認したいと考えています。サーバーへのこの接続が確立されることは非常に重要です。これにより、後で必要になるユーザーに関する情報が保存されるからです。

私の SKPaymentTransactionObserver では、SKPaymentTransactionStatePurchased でサーバーを呼び出そうとしています。問題は、SKPaymentTransactionStatePurchased に「ありがとう」という標準アラートが表示され、購入が完了したことです。アプリがサーバーに接続するのに時間がかかるため、サーバーへの呼び出しが完了する前にこの標準アラートが表示されます。ユーザーがここでアプリを終了するとどうなりますか? いつサーバーに連絡する必要がありますか? また、サーバーへの呼び出しが完了したときにユーザーにアラートを表示したい場合、いつそれを行う必要がありますか?

これは私が使用しているコードです:

//This is called on "SKPaymentTransactionStatePurchased"
- (void) completeTransaction: (SKPaymentTransaction *)transaction
{
    [self saveAndVerifyOnServer:transaction];
    [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}
4

2 に答える 2

2

これは、メソッドSKPaymentQueueについてのドキュメントに次のように記載されています。finishTransaction

アプリケーションは、トランザクションを正常に処理し、ユーザーが購入した機能のロックを解除した後でのみ、finishTransaction: を呼び出す必要があります。

finishTransactionこのことから、サーバー上でトランザクションを保存して検証し、それが確認された場合にのみメソッドを呼び出す必要があると思います。ディーンが指摘しているように、確認が完了する前にユーザーが終了する状況に対応する必要があります。

良いニュースは、 がSKPaymentQueueセッション間で持続することです。そのため、購入が終わっていないことが記憶されます。これは、次にトランザクション オブザーバーを追加するときに、デリゲートですぐに呼び出しを受ける可能性があることを意味します。トランザクションを再開できるように、サーバー プロセスをコーディングする必要がある場合があります。

于 2010-01-18T20:24:45.803 に答える
0

サーバーとの通信に成功するまで、購入をすぐに (NSUserDefaults に) アプリに保存できます。

サーバーから戻ってきたら、NSUserDefaults からキーを削除します。

サーバーが戻ってくる前にアプリが終了した場合、キーは次回起動時に NSUserDefaults に残っているため、購入を送信できます。

サム

[[NSUserDefaults standardUserDefaults] synchronize]PSキーが書き込まれることを確認するために電話することを忘れないでください!

PPS どうにかして複数の購入から保護する必要があります。おそらく、アプリによって生成されたある種の一意のキーを使用しています。

于 2010-01-18T20:08:05.510 に答える