2011-02-01 6 views
2

私はトランザクションの領収書の検証についていくつかの疑問があります。iPhoneアプリ内購入:領収書の検証

  • をなぜ外部のサーバが必要なのか?なぜ私はhttp://buy.itunes.apple.comにiPhoneから直接連絡できないのですか?
  • この外部サーバーがダウンしているか、領収書が有効でない場合はどうなりますか?それを決済キューに伝える方法は?トランザクションが実際に成功したため、finishTransactionは「支払い成功」アラートビューを表示しますが、これはユーザーを混乱させると思います。

申し訳ありません申し訳ありませんが、私はアプリ内購入の流れを誤解していたり​​、私の質問が十分ではありません。ありがとう。

編集:領収書が有効ではないことがわかったらfinishTransactionと呼ぶべきではないと思いますが、これは問題ですか?ドキュメンテーションによれば、アプリケーションは常にその関数を呼び出す必要があります。また、その時点でお金は既に移転されています。が混乱しています

+0

アップルに電話しましたか?これはあなたがそれらを確認する必要があります。代わりに、アプリを提出することもできます。レビューノートを残しておけば、レビューチームはレビューの結果を返すでしょう。あなたの質問の詳細な説明をレビューノートに記入してください。 – Moshe

+0

@Moshe:これはよくある問題だと思った。領収書が無効な場合、アプリ内購入を既に実装している他の人はどうしますか? – pt2ph8

+0

私は分かりません。私はアプリの購入で決してしなかった。私はちょうど私がすることを提案していた。私はこの質問に主演した。私はすぐにアプリ内購入を実装するかもしれないし、あなたが得ることを知りたい。また、テストアカウントにはクレジットカードまたは電子メールアドレスが必要ですか?運が良かった! – Moshe

答えて

8

領収書の妥当性確認は、トランザクションが完全で成功したことを保証します。あなたは本当にユーザーの電話を信じることができないので、あなたはiPhoneからそれをしたくありません。

  1. ユーザーが、アプリ内購入
  2. 完全を開始し、アプリは、検証のためにサーバーを要求します
  3. あなたはAppleと領収書を検証:それが有効だと、あなたが購入にリンクされているものは何でもアクションを実行することができますサーバーがダウンしている場合
  4. アプリはキューからトランザクションを削除します(...サブスクリプションを登録し、コンテンツを配信/アンロック)(finishTransaction

は、あなたが取引を終了してはなりませんユーザーに「使用不可能メッセージ」を表示します。

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions 

が後で再度呼び出されます。

領収書が無効であることが判明した場合は、関連するトランザクションを完了する必要があります。そうでない場合は、余分なトランザクションを永続的にトランザクションキューに置くことができます。これは、アプリケーションが実行されるたびに、トランザクションごとにpaymentQueue:updatedTransaction:が1回呼び出されることを意味します。

私のアプリでは、領収書の検証は、Webサービスを通じて行われ、無効な領収書の場合にエラーコードを返します。そのため、外部サーバーが必要です。ユーザーが何らかの形で領収書の検証をスキップすると(Webサービスの「成功」応答を偽って)、サーバーに購入の痕跡がないため、コンテンツ/アクセス機能のロックを解除できなくなります。

+0

説明をありがとう! – pt2ph8

+0

- (void)paymentQueue:(SKPaymentQueue *)キューupdatedTransactions :(NSArray *)トランザクションは実際に呼び出されますが、transaction.transactionStateは "SKPaymentTransactionStateFailed"であり、transaction.error.codeはSKErrorPaymentCancelledです。 – Nick

1

ユーザーが信頼できない場合は、クローズドネットワーク上のサーバーとの通信を偽装していないと考えることはできません。つまり、SSL証明書に類似したものを使用している場合を除き、サーバー検証はサーバーであり、Macではないことを確認することはできません。

関連する問題