IAP非消耗品恢复与不必要的更新事务和奇怪的事务

时间:2015-06-02 11:46:21

标签: ios in-app-purchase

摘要

在Sandbox环境中恢复非消耗品时,我收到了奇怪的SKPaymentTransaction对象:

  • transaction.transactionState == SKPaymentTransactionStatePurchased
  • transaction.originalTransaction != nil

我认为仅当transactionState为SKPaymentTransactionStateRestored时才会分配originalTransaction属性。

这是iOS错误吗?

详情

我的IAP代码如下。

- (void)paymentQueue:(SKPaymentQueue *)queue
 updatedTransactions:(NSArray *)transactions {

  for (SKPaymentTransaction* transaction in transactions) {   // (1)
    switch (transaction.transactionState) {
      case SKPaymentTransactionStatePurchasing: {
        break;
      }
      case SKPaymentTransactionStatePurchased: {   // (2)
        BOOL success = [self _provideContents]
        if (success) {
          [queue finishTransaction:transaction];
        }
        break;
      }
      case SKPaymentTransactionStateRestored: {    // (3)
        BOOL success = [self _resotreContents];
        if (success) {
          [queue finishTransaction:transaction];
        }
        break;
      }
      ...
   }
}

- (void)paymentQueue:(SKPaymentQueue *)queue 
 removedTransactions:(NSArray *)transactions {
   // (4)
}

}

我的应用程序有200个非消耗性IAP项目。 我的测试沙盒用户已经购买了所有200个IAP项目。

我使用调试器运行我的应用程序,然后点击我的应用程序上的“恢复”按钮,并使用上面的沙盒用户帐户登录。

我在//(1)行设置了断点。当调试器在//(1)行中断时,我确认transactions.count == 200transactions[0].transactionStete == SKPaymentTransactionStateRestored

我在//(1)上停止执行我的应用程序。我的应用程序进程突然终止。 在这段时间内,仍有200笔未完成的交易。

我重新启动App并再次执行//(1)行,//(3)行执行200次。所以所有交易都完成了。

但是我点击了设备上的主页按钮并重新启动了我的应用程序,意外的是,//(2)行被执行了大约80~90次。那个案子的交易是:

  • transaction.transactionState == SKPaymentTransactionStatePurchased
  • transaction.originalTransaction != nil

为什么某些交易会再次更新? 为什么不恢复transactionState,是否已购买?

这种奇怪的行为只发生在购买200个IAP项目的沙箱用户身上。对于购买了10或20件商品的另一个沙箱用户,没有发生。

0 个答案:

没有答案