Как узнать, что SKStoreKit In App Покупки вызвало applicationWillResignActive? - PullRequest
4 голосов
/ 24 февраля 2012

Нормально ли, когда вы отправляете покупку в приложении, она вызывает applicationWillResignActive, когда вы спрашиваете, хотите ли вы купить?

Например:

    [[SKPaymentQueue defaultQueue] addPayment:payment];

Это приводит к тому, что приложение подает в отставку, а затем, когда вы нажимаете кнопку BUY или CANCEL, а затем вызывается applicationWillEnterForeground.

Есть ли способ узнать, что это было из-за покупки приложения, в результате чего приложение ушло в отставку, чтобы при повторном выходе на передний план я мог пометить некоторые вещи, которые следует пропустить?

Спасибо

Ответы [ 2 ]

8 голосов
/ 24 февраля 2012

Хорошо, это то, что я собираюсь сделать, так как я не могу придумать другой способ сделать это ...

Когда приложение запускается заново, оно вызывает application: didFinishLaunchingWithOptions, а когда оно запускается из фона, оно вызывает applicationWillEnterForeground. В обоих этих случаях он всегда вызывает applicationDidBecomeActive, где у меня есть код, который я хочу пропустить, когда происходит IAP.

Когда приложение закрывается или перемещается в фоновый режим, оно всегда вызывает applicationWillResignActive, а затем applicationDidEnterBackground.

Я заметил, что IAP вызывает applicationWillResignActive, а затем applicationDidBecomeActive и ничего больше.

Итак, в приложении: didFinishLaunchingWithOptions я установлю переменную startupDidFinish = 1

А в applicationWillEnterForeground я установлю переменную startupForeground = 1

В приложении DidBecomeActive я сделаю это:

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

    }
    startupDidFinish = 0;
    startupForeground = 0;

Так что это позволит вам пропустить код для таких вещей, как IAP (и я думаю, что SMS также действует так же).

1 голос
/ 14 мая 2016

Я нашел способ узнать, была ли это вызвана покупкой приложения.

Вызовите этот метод во время метода applicationWillResignActive:

- (BOOL)checkIfTheUserIsDoingInAppPurchase {

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

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...