5

私のアプリでは、ユーザーはアプリ内購入を介してPro機能にアップグレードできます。自分のサーバーでレシートデータを検証しています。サーバーから確認が返されたら、finishTransactionを呼び出します。

検証が失敗し(おそらく著作権侵害の試みが原因ではない)、finishTransactionを呼び出さない場合はどうなりますか?それは無期限にキューにとどまりますか?

4

3 に答える 3

4

FinishTransaction呼び出されなかった場合、私はいつも、ある時点で奇妙な行動をとることに気づきました。

StandardUserDefaults最適なオプションは、「これを購入しましたが失敗しました」などの設定をして、を呼び出すことFinishTransactionです。次に、アプリを再起動したとき(またはアプリをフォアグラウンドにしたとき)に、これを確認してサーバーに送信できます。

また、購入が消耗品でない場合(つまり、コインやお金を購入していない場合)は、設定メニューのボタンからFinishTransactionユーザーに電話してアクティブ化するように指示するだけです。RestoreTransactionこのボタンは、とにかく非消耗品の購入のためにAppleによって必要とされます。

于 2012-09-11T12:02:54.123 に答える
4

Appleからの指示は次のとおりです。アプリ内購入が正常に行われたという通知を受け取った場合、ユーザーが銀行口座にお金を支払ったか、ハッカーがその通知を偽造したかの2つの可能性があります。

したがって、レシートをサーバーに送信し、サーバーがレシートをチェックします。正しい領収書が拒否されないように100%確認してください。レシートが有効で処理されたことをアプリに通知すると、アプリはfinishTransactionを呼び出します。レシートが無効であることがアプリに通知された場合、誰も正確に何をすべきかわかりませんが、finishTransactionを呼び出しても問題はありません。他に問題が発生した場合(サーバーがクラッシュした、インターネットがダウンしたなど) 、finishTransactionを呼び出さないでください。そうすると、顧客は何も得られずにお金を失い、非常に怒ります。その場合、後で再度取引について通知されます。ユーザーが2つ以上のデバイスを持っている場合は、おそらく別の電話で。したがって、トランザクションが任意の場所に到着する可能性があることを準備してくださいそのデバイスでアプリが購入を確認していなくても、時間はかかります。

そのため、ユーザーのデフォルトに何かを保存するのは間違っています。ユーザーが「購入」ボタンを押すデバイスは、必ずしも購入が行われるデバイスであるとは限りません。(多くのiOSデバイスを持っている人がいますが、単純な場合でも、ユーザーはiPhoneとiPadを切り替える可能性があります)。

于 2015-08-18T13:56:40.720 に答える
1

サーバーへのリクエストが失敗した場合、どのようにしてアプリはサーバーへのリクエストを再試行するように再度通知されますか?

トランザクションを完了しなかった場合は、SKPaymentQueueに残ります。また、アプリがSKPaymentQueueに接続すると、それに関連するすべてのトランザクションを受信します。

したがって、アプリはすべての未完了のトランザクションを完了する必要があります。

于 2016-07-22T10:04:46.503 に答える