ios - 使用 swift、iOS 恢复应用内购买

标签 ios swift in-app-purchase storekit

我正在应用程序购买中实现恢复。我有一个按钮,其 Action 是

@IBAction func restorePurchases(send : AnyObject){

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

我的问题是。

  1. 这是正确的恢复方式吗?
  2. 我们如何验证恢复购买的操作是否成功?

最佳答案

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

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

要检查恢复是否正常,您必须遵循以下协议(protocol): 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
    }
  }
}

关于ios - 使用 swift、iOS 恢复应用内购买,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28734890/

相关文章:

ios - 如何在 alamofire 中发布单值数组?

ios - 按两个值对 NSMutableArray 进行排序

html - 如何在 Swift 4 中使用 html <ruby> 标签来显示日语字符

使用 Crypto Swift 的 iOS 13 AES 解密不起作用

ios - 捕获 "The In-App Purchase has already been bought"事件

ios - 需要应用内购买

ios - 使用 MonoTouch 在 iPad 设备上播放声音时出现问题

swift : Add image to scopebar in uiSearchbar instead of titles

android - getPurchase() OK 但 getSkuDetails() NULL

objective-c - IOS 6 map 崩溃