2012-07-26 7 views
5

アップルが提案したトランザクションのVerificationControllerコードを使用してiOSアプリを更新しています。最近の「ハック」のためにアプリ内購入を確認しています。スプーフィングされたAppleサーバーからの偽の領収書にアプリが実行中にAppleIDを要求しています

私はすべてが統合されており、現在テスト中です。私は何度もアプリを走らせていますし、検証用のものは何度も動いています。

新品の新しいアプリとAppleIDから始めるなど、購入に関するすべてのことをテストしたいと思います。だから私は完全に私のテストデバイスからアプリを削除しました。 iTunes Connectで新しい「テストユーザー」AppleIDを作成しました。私はテストデバイスのSettingsアプリケーションに行き、Storeに行き、デバイスのデフォルトのAppleIDをこの新しく作成したAppleIDに変更しました。

デバッガでXcodeからアプリを再実行します。デバッガは、テストデバイスにアプリケーションを再インストールして新しく実行します。

テストデバイスは、起動直後に、AppleIDパスワードアラートタイプのビューを表示し、元のアプリ内購入を含むすべてのテストに元々使用していた古いAppleIDのパスワードを尋ねます。それに対する検証。ストアの設定アプリで設定したAppleIDの新しいデバイスのパスワードを要求しません。

私は新しいアプリとしてそれを実行すると、検証コードが実行されないとApple StoreKitのもので何かを私のルーチンのいずれかからのコードが孤独

[[SKPaymentQueue defaultQueue] addTransactionObserver:observer]; 

(オブザーバーを除き実行されませんStoreKitのデリゲートオブジェクトです。作成されますが、init以外のルーチンは実行されません。initは、スタティック変数を設定してシングルトンタイプのクラスを作成する以外は何もしません)

チェック用に、

NSLog(@"in App Delegate, payment queue transactions are %@", [[SKPaymentQueue defaultQueue] transactions]); 

これは、古いトランザクションが何も表示されていないことを示しています。

私は、なぜアプリケーションが新しくインストールされたときに元のテストユーザーのAppleIDを要求し始めたのか、そのデバイスのストアのAppleIDが異なっているのか分からないし、 StoreKitにアクセスします(上記の場合を除く)。

これについての洞察は理解できます。

ETA:パスワードダイアログでCANCELをタッチしても、アプリケーションで余分なコードが実行されることはなく、アプリの実行を妨げません。

アプリ内購入の画面(アプリが利用可能なアプリ内購入を問い合わせる)に入ると、OLD AppleIDと同じ方法でパスワードをもう一度尋ねます。私はキャンセルすることができ、何も起こりそうにない。私が実際に自分のアプリで「購入したものを復元する」ボタンをタッチすると、ストア設定で設定された新しいAppleIDのパスワードが尋ねられます。私は何が起こっているのか理解したいと思っているので、新しいAppleIDのもとでリストアや購入を完了/試行することで物事を混乱させたくないので、この時点を過ぎていません。

おかげ

+0

何とか解決しましたか? –

+0

@bluesm私は問題を解決したことがなく、もはや私が問題を抱えていたデバイスを実際に使用していません。ごめんなさい。私は最終的に引き出しにそのデバイスを持っているので、私は最終的にそれを試して戻ってくるかもしれません... – chadbag

答えて

2

StoreKit.framework作品システム全体は、その表示されますのApple IDは、あなたのアプリとは何の関係もありませんし、アプリを再インストールしても、影響はありません。

しかし、あなたはlog out from the iTunes Store/App Store次のことができます。

  1. タップ設定→iTunesの&のAppストア
  2. は、Apple IDが(一番上のボタン)に署名したタップ
  3. をタップして
  4. を "ログアウト"

あなたのアプリをもう一度使用すると、StoreKitはメールとパスワードの両方を入力する必要があります。

+0

AppleIDが設定に保存されているものと関連していないというコメントを見たかどうかわかりません( "AppleID for theデバイスの店舗が異なる」) – chadbag

+0

iOSが「このアプリは以前の購入情報をリクエストしています」という情報をどこかに保存していて、後続の読み込み時にそれを尋ねることはできません。アプリを削除するだけで私のためにそれを取り除きました。 – rob5408

+0

@chadbagああ、申し訳ありませんが、正しくそこにあなたを理解していませんでした。何が起こっているのか分からない。 :( –

-1
Steps to Fix: 
1. Starting at the App Store, pull up the multi-task bar and tap the Settings app. 
2. Scroll down and tap 'General'. 
3. Scroll down and tap 'Date & Time'. 
4. If the 'Set Automatically' switch is ON, turn it OFF. 
5. Tap 'Set Date & Time'. 
6. Tap the field that says "[day of the week], [month][day], 2013". 
7. Adjust the year wheel to say "2012" and back out of the Date & Time section. 
8. Multi-task back to the App Store and attempt to download the app again. 
9. Tap 'Cancel' on the "Cannot connect…" modal. 
10. Return to the native Settings > General > Date & Time > Set Date & Time. 
11. Go back to the month, date, year wheels and change the year to "2030". 
12. Back out to the home screen and launch the App Store. 
13. A "Cannot connect to the Store" modal should appear right away. 
14. Tap 'OK' and then multi-task back to Settings. 
15. Return all the way back to the month, date, year wheels again and change the year back to "2013. 
16. Multi-task back to the App Store and attempt to download the app again. 
6

私はまったく同じ問題を抱え、それを解決するために何時間も苦労しました。前述のように、StoreKit作品システム全体として

とシステムが

[[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 

が呼び出さされていない任意のトランザクションのためにログインを求め続けています。私は削除した私が最初に私のテストのApple IDで

  • を、製品を購入し

    • if (error.code != RMStoreErrorCodeUnableToCompleteVerification) { 
          // If we were unable to complete the verification we want StoreKit to keep reminding us of the transaction 
          [queue finishTransaction:transaction]; 
      } 
      

      これは、何が起こったか、おそらくです:私は、私はこの容疑者の行を見つけ、ソースコードを見て、RMStoreを使用していましたテスト目的の製品

    • もう一度購入しようとしました。この時点で、私は間違った信用証明書を入力し、RMStoreは[[SKPaymentQueue defaultQueue] finishTransaction:に電話しませんでした。
    • アプリが起動するたびにログインを要求し始めました。

    別のテストアカウントでログインしようとしましたが、古いApple IDでログインするように依頼しました。私もiTunes ConnectでApple IDを削除したが、これは役に立たなかった。

    最後に、私は同じアカウントで製品を復元することで解決しました。 この問題を解決する別の方法があるかどうかわかりません(StoreKitキューをリセットする)。とにかくいつもあなたのコードでfinishTransactionを呼び出すことを忘れないでください。

  • 関連する問題