2012-02-24 7 views
3

アプリ内購入を送信すると正常になりますか?購入するかどうかを尋ねるうちにapplicationWillResignActiveが発生しますか?例えばSKStoreKit In App PurchasesがapplicationWillResignActiveを引き起こしたことを知るには?

[[SKPaymentQueue defaultQueue] addPayment:payment]; 

これは、アクティブ辞任するアプリを引き起こし、あなたが購入したり、CANCELヒットしたら、その後applicationWillEnterForegroundと呼ばれます。

、それが再び前面に入ったとき、私はフラグいくつかのものをスキップすることができるように辞任するアプリケーションを引き起こしているアプリの購入であったことを知る方法はありますか?

おかげで

+0

同じことが私のアプリで発生します。問題は約1年前に起こった:http://stackoverflow.com/q/3891082/490682 –

+0

@ StephenAshley.developerだから、少なくともそれは私が夢中ではないよ!これを行うIAPであることを確認/確認する方法はありますか? – jsherk

+0

私は自分の質問にさらに5時間は答えられませんが、私は明日投稿する解決策があります! – jsherk

答えて

8

[OK]を、これは私が、私はそれを行うための他の方法を考えることはできませんので、するつもりです何です...

アプリケーションが新鮮を起動すると、それはアプリケーションを呼び出す:didFinishLaunchingWithOptions、およびバックグラウンドから起動すると、applicationWillEnterForegroundが呼び出されます。これらの2つのケースでは、常にapplicationDidBecomeActiveを呼び出します。これは、IAPが発生したときにスキップしたいコードがある場所です。アプリケーションがシャットダウンするか、それは常にapplicationWillResignActive、その後applicationDidEnterBackgroundを呼び出してバックグラウンドに移動し

。私が気づいた何

は、IAPはapplicationWillResignActive、その後applicationDidBecomeActiveと他には何を呼び出すことです。アプリケーションでそう

:didFinishLaunchingWithOptions私は変数startupDidFinish = 1

を設定し、applicationWillEnterForegroundに私はこれを行うだろうapplicationDidBecomeActiveで= 1

変数startupForegroundを設定します:

//SKIP if application resigned active then becomes active again. 
    if (startupDidFinish == 1 || startupForeground==1) { 
     //Do normal startup stuff 

    } 
    startupDidFinish = 0; 
    startupForeground = 0; 

をこれにより、IAPなどのコードをスキップすることができます(また、SMSも同じように動作します)。

+0

アプリ内購入を使用しているすべての人に素晴らしい回答です。 – Curnelious

1

私はそれがアプリの購入にすることによって引き起こされたかどうかを知るための方法を見つけました。

コールapplicationWillResignActive方法中に、この方法:

- (BOOL)checkIfTheUserIsDoingInAppPurchase { 

for (SKPaymentTransaction* transaction in [[SKPaymentQueue defaultQueue] transactions]) { 
    if(transaction.transactionState == SKPaymentTransactionStatePurchasing) { 
     return YES; 
    } 
} 
return NO; 

} 
関連する問題