如何知道应用程序购买中的StoreKit导致applicationWillResignActive?

时间:2012-02-24 01:55:13

标签: iphone objective-c ios cocoa-touch ios4

提交应用内购买时是否正常,它会导致applicationWillResignActive询问您是否要购买?

例如:

    [[SKPaymentQueue defaultQueue] addPayment:payment];

这会导致app退出活动状态,然后一旦点击BUY或CANCEL,然后调用applicationWillEnterForeground。

有没有办法知道这是一个应用内购买导致应用程序辞职,以便当它再次进入前台时,我可以标记一些要跳过的内容?

由于

2 个答案:

答案 0 :(得分:8)

好的,这就是我要做的事情,因为我想不出其他任何方式......

当应用程序启动时,它会调用application:didFinishLaunchingWithOptions,当它从后台启动时,它会调用applicationWillEnterForeground。在这两种情况下,它总是调用applicationDidBecomeActive,这是我在IAP发生时想要跳过的代码。

当应用程序关闭或移动到后台时,它总是调用applicationWillResignActive然后调用applicationDidEnterBackground。

我注意到IAP调用applicationWillResignActive然后调用applicationDidBecomeActive而没有其他内容。

所以在应用程序中:didFinishLaunchingWithOptions我将设置一个变量startupDidFinish = 1

在applicationWillEnterForeground中,我将设置一个变量startupForeground = 1

在applicationDidBecomeActive中,我会这样做:

    //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 :(得分:1)

我找到了一种方法来了解它是否是由App购买引起的。

在applicationWillResignActive方法中调用此方法:

- (BOOL)checkIfTheUserIsDoingInAppPurchase {

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

}