提交应用内购买时是否正常,它会导致applicationWillResignActive询问您是否要购买?
例如:
[[SKPaymentQueue defaultQueue] addPayment:payment];
这会导致app退出活动状态,然后一旦点击BUY或CANCEL,然后调用applicationWillEnterForeground。
有没有办法知道这是一个应用内购买导致应用程序辞职,以便当它再次进入前台时,我可以标记一些要跳过的内容?
由于
答案 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;
}