【问题标题】:How to know that SKStoreKit In App Purchses caused applicationWillResignActive?如何知道 StoreKit In App Purchases 导致 applicationWillResignActive?
【发布时间】:2012-03-14 12:32:28
【问题描述】:

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

例如:

    [[SKPaymentQueue defaultQueue] addPayment:payment];

这会导致应用退出活动状态,然后在您点击 BUY 或 CANCEL 后调用 applicationWillEnterForeground。

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

谢谢

【问题讨论】:

  • 我的应用程序也会发生同样的事情。大约一年前出现了这个问题:stackoverflow.com/q/3891082/490682
  • @StephenAshley.developer 好吧,至少我没有发疯!有没有办法标记/检查是否是 IAP 这样做?
  • 5 小时后我无法回答我自己的问题,但我有一个解决方案,我将在明天发布!

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


【解决方案1】:

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

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

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

我注意到 IAP 调用 applicationWillResignActive 然后 applicationDidBecomeActive 没有别的。

所以在 application: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 的行为方式也相同)。

【讨论】:

  • 适合所有使用应用内购买的人的最佳答案。
【解决方案2】:

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

在applicationWillResignActive方法期间调用该方法:

- (BOOL)checkIfTheUserIsDoingInAppPurchase {

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

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-26
    • 2018-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 2018-03-25
    • 2020-12-20
    相关资源
    最近更新 更多