Swift:IAP updatedTransactions未调用.已购买

Hug*_*rom 6 in-app-purchase ios swift

我的代码有问题.函数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
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

Tul*_*leb 4

抱歉,我可能回答得有点晚,但这可能与这个问题有关。当 IAP 未达到状态时,您是否正在从 Xcode 测试 IAP .purchased

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

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

就我而言,我有 28 笔交易等待完成,因为我在购买阶段有一个错误的 switch case 语句。

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

for transaction: AnyObject in SKPaymentQueue.default().transactions {
    SKPaymentQueue.default().finishTransaction(transaction as! SKPaymentTransaction)
}
Run Code Online (Sandbox Code Playgroud)