购买Apple商店产品在开始时会导致“已购买”状态

时间:2016-10-27 14:22:52

标签: ios objective-c iphone in-app-purchase

现在我正在努力解决下一个问题。我已经在我的应用程序中使用简单的IAPManager从AppStore购买东西,但问题是 - 当我尝试购买产品时,应用程序调用{​​{1}}方法,事务状态为updatedTransactions,然后再显示如果我想买那件东西的提醒。

只有当我在申请开始之前尝试买东西时才会发生这种情况。在重新加载应用程序之前,它不会再发生。这是我的IAPManager代码:

Purchased

1 个答案:

答案 0 :(得分:1)

我认为你的问题与观察者有关。正如我所知,每次尝试购买产品时都会添加事务观察器,并在从事务队列中删除事务(任何)时将其删除。

如果您的交易未完成且您的应用已关闭,您将在打开应用时收到有关交易完成的通知。所以你不会收到这个通知,你会错过它。

我建议您在init方法中添加观察者,并且不要删除它,原因我之前详述过。另外,我建议您在打开应用程序时创建IAP类的实例(didFinishLaunchingWithOptions :)以设置事务观察器并接收这些事务的延迟通知。

还有一件事......你应该管理你的交易数组,而不仅仅是第一个交易。

你应该像这样创建一个for循环来处理它们

for (SKPaymentTransaction *transaction in transactions) {
     switch (transaction.transactionState) {
          case SKPaymentTransactionStatePurchased: {
            [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
            break;
          }
          case SKPaymentTransactionStateFailed:
            [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
            break;
          case SKPaymentTransactionStateRestored:
            [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
            break;
          case SKPaymentTransactionStatePurchasing:
            break;
          case SKPaymentTransactionStateDeferred:
            break;
          default:
            break;
    }
};