Swift:IAP updatedTransactions未调用。已购买

时间:2016-11-28 22:03:18

标签: ios swift in-app-purchase

我的代码有问题。函数updatedTransactions仅在事务处理时调用一次.Purchasing并且在事务完成后不会调用。

func buyProduct(product: SKProduct) {
  let payment = SKPayment(product: product)
  SKPaymentQueue.defaultQueue().addTransactionObserver(self)
  SKPaymentQueue.defaultQueue().addPayment(payment)
}

func paymentQueue(queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {

  for transaction in transactions {
    print(transaction)
    switch (transaction.transactionState) {
      case .Purchased, .Restored:
        print("Completed")
        complete(transaction)
        break
      case .Failed:
        fail(transaction)
        break
      default:
        break
    }
  }
}

1 个答案:

答案 0 :(得分:1)

抱歉,我可能会稍晚回答,但可能与this question有关。您是否在Xcode没有达到.purchased状态时测试您的IAP?

如果是,则需要将设备的App Store ID设置为您在iTunes Connect上创建的ID(用户菜单,沙盒测试仪)。

如果不是,那么可能是因为您的SKPaymentQueue已经包含太多等待完成的交易。您可以使用SKPaymentQueue.default().transactions进行检查。

在我的情况下,我有28笔交易等待完成,因为我在购买阶段有一个糟糕的开关案例陈述。

如果是这种情况,您可以在viewDidLoad中添加这些行来完成每一行(不要忘记在找到它们未在代码中完成的原因后删除它们):< / p>

for transaction: AnyObject in SKPaymentQueue.default().transactions {
    SKPaymentQueue.default().finishTransaction(transaction as! SKPaymentTransaction)
}