2010-12-02 11 views
3

ストア内のトランザクションの1つが復元されたか、または購入が成功したために完了すると、ストアキットは確認ダイアログボックスを表示するアラートビューを生成します。現在のバージョンでは、「ありがとうございます、あなたの購入は成功しました」と書かれています。ストアキットのアラートビューを傍受する

購入後に別の画面に移動する必要があるため、そのダイアログボックスを傍受して、ユーザーが解消するまで移行しないでください。問題は、私はそのダイアログボックスを何も制御していないように見えるということです。誰でもどのようにそれを行うためのアイデアがありますか?

ありがとうございます!

答えて

4

試してください。購入代理人には、購入が完了したときに通知されます。その仕組みを使用します。これらの警告はAppStore.appバイナリの一部であり、プロセスでは実行されないため、それらに触れることはできません。

あなたはそれらのStoreKitアラートがポップアップしたときにアプリが非アクティブになるという事実を使用することができます
+0

お返事ありがとうございました。実際に、支払いが成功すると、支払い代理人(私のSKPaymentTransactionObserverクラス)に通知されます。その時点で私は製品を提供してトランザクションを終了しますが、その後に起こることは私が制御できないものです...そして、それはダイアログボックスが表示されたときです。それはあなたが何を意味していたのですか? – Chico

+0

それは私が言ったことです。アラートを却下したり、アラートを変更することはできません。 –

+0

しかし、プロセス全体がいつ終了するかを知る方法はあります。そのアラートに干渉するのではなく、ユーザーが大丈夫だと知っているかどうかを少なくとも知るために、いいえ? –

2

購入は、それが「非アクティブ」だ場合、それまで別の画面に自分の動きを遅らせる終了後のUIApplicationのActiveStateのプロパティをチェックします状態が再び「アクティブ」に変わります(UIApplicationDidBecomeActive通知を監視)。

'activeState'プロパティは4.0より古いファームウェアではサポートされていませんが、アプリ状態の変更を手動で追跡していつでもその状態を知ることができます。

+0

それはうまく働いた、ありがとう。アプリがアクティブな状態でない場合、私はそれがアクティブな状態になるまで待ってアラートを表示します。私は下の私のコードのスニペットを与えるでしょう。 –

1

私はこの技術をiOS6、iOS7、iOS8でテストしたところ、すべてうまく見えます。

- (void) activeShow; 
{ 
    UIApplication *app = [UIApplication sharedApplication]; 
    if (app.applicationState == UIApplicationStateActive) { 
     [self finishActiveShow]; 
    } else { 
     [[NSNotificationCenter defaultCenter] addObserver:self 
       selector:@selector(becomeActiveNotification:) 
       name:UIApplicationDidBecomeActiveNotification object:nil]; 
    } 
} 

- (void) finishActiveShow; 
{ 
    if (self.beforeShow) { 
     self.beforeShow(); 
    } 
    [self.alert show]; 
    if (self.afterShow) { 
     self.afterShow(); 
    } 
} 

- (void) becomeActiveNotification:(id) sender; 
{ 
    SPASLog(@"UIApplicationDidBecomeActiveNotification: %@", sender); 
    // From https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/Notifications/Articles/NotificationCenters.html 
    // "In a multithreaded application, notifications are always delivered in the thread in which the notification was posted, which may not be the same thread in which an observer registered itself." 
    // So, it seems that we may not get the notification on the main thread. 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [self finishActiveShow]; 
    }); 

    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidBecomeActiveNotification object:nil]; 
} 
+0

Hmmm。今、私はこれが薄れていることが分かりました。時には(そして、実際はほとんどの時間のように見える)Apples "ありがとう"アラートが表示され、app *はアクティブ状態になります。 –

関連する問題