使用swift,iOS恢复InApp购买

时间:2015-02-26 05:11:44

标签: ios swift in-app-purchase storekit

我正在应用购买中实施恢复。我有一个按钮,其动作是

@IBAction func restorePurchases(send : AnyObject){

SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
// if (success) { 
// I want to do something here      
// }
}

我的问题是。

  1. 这是恢复的正确方法吗?
  2. 我们如何验证恢复购买的成功行动?

2 个答案:

答案 0 :(得分:26)

不要忘记检查您是否可以付款:

if (SKPaymentQueue.canMakePayments()) {
  SKPaymentQueue.default().restoreCompletedTransactions()
}

要检查恢复是否良好,您必须遵循协议: SKPaymentTransactionObserver 然后实现方法:

func paymentQueue(queue: SKPaymentQueue!, updatedTransactions transactions: [AnyObject]!)

并通过以下方式订阅该活动:

SKPaymentQueue.default().add(self)

最后,这是我如何检查结果的例子:

func paymentQueue(_ queue: SKPaymentQueue!, updatedTransactions transactions: [AnyObject]!)    {
  print("Received Payment Transaction Response from Apple");
  for transaction in transactions {
    switch transaction.transactionState {
    case .purchased, .restored:
      print("Purchased purchase/restored")
      SKPaymentQueue.default().finishTransaction(transaction as SKPaymentTransaction)
      break
    case .failed:
      print("Purchased Failed")
      SKPaymentQueue.default().finishTransaction(transaction as SKPaymentTransaction)
      break
    default:
      print("default")
      break
    }
  }
}

答案 1 :(得分:0)

出于某种原因,即使在尝试 SKPaymentQueue.default().restoreCompletedTransactions() 之后,在恢复期间也从未为我调用以下函数。

func paymentQueue(queue: SKPaymentQueue!, 
                  updatedTransactions transactions: [AnyObject]!)

添加这行代码 SKPaymentQueue.default().add(self) 是为了让我的班级成为观察者,但仍然没有更新。

如果您尝试重新付款,似乎会在恢复的场景中调用此函数,StoreKit API 会自动决定是否应该购买或恢复并相应地显示消息。

即使从用户的角度考虑,他们不会再次收费,苹果拒绝了我们的应用,因为没有添加恢复场景。

因此,如果您在代码中调用 SKPaymentQueue.default().restoreCompletedTransactions(),请处理这些额外的 StoreKit 委托来管理您的恢复:

func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) {
  handleSuccess()
}

func paymentQueue(_ queue: SKPaymentQueue, 
                  restoreCompletedTransactionsFailedWithError error: Error) {
  handleError()
}
相关问题