2015-04-03 26 views
1

我想向我的应用添加还原选项。 我添加了一个按钮,这是否2行:Restore Purchase - Swift

SKPaymentQueue.defaultQueue().restoreCompletedTransactions() 
SKPaymentQueue.defaultQueue().addTransactionObserver(self)  

而且我有功能,多数民众赞成应该检查是否恢复成功:

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

    for transaction:AnyObject in transactions { 
     if let trans:SKPaymentTransaction = transaction as? SKPaymentTransaction{ 
      switch trans.transactionState { 
      case .Purchased, .Restored: 
       SKPaymentQueue.defaultQueue().finishTransaction(transaction as SKPaymentTransaction) 
       //code 
       break; 
      case .Failed: 
       SKPaymentQueue.defaultQueue().finishTransaction(transaction as SKPaymentTransaction) 
       //code 
       break; 
      default: 
       break; 
      } 
     } 
    }  

但是,当我按下按钮没有反应,不会激活paymentQueue功能。

代码有问题吗? 什么问题?

谢谢。

+0

你检查吗?可能该文件可以帮助你。 http://stackoverflow.com/questions/28734890/restore-inapp-purchase-using-swift-ios – aliyasar 2015-04-03 19:53:31

+0

这是相同的代码,我的是不是? – Omer 2015-04-03 19:56:34

回答

0

它可能不是唯一的问题,但是在触发恢复完成的事务之后,您将自己添加为事务观察者。如果restoreCompletedTransactions()是同步的,或者此方法在此时设置回调路由,则将错过响应。将调用转换为

SKPaymentQueue.defaultQueue().addTransactionObserver(self) 
SKPaymentQueue.defaultQueue().restoreCompletedTransactions() 

因此可以解决您的问题。

+0

它没有帮助:/ – Omer 2015-04-03 20:25:40

+0

很抱歉听到。不过,在触发行动之前设置委托是一种很好的做法。只是想知道:你如何检测回调是否发生 - 你在方法开始时是否有断点或日志语句?另外,还有什么要恢复的?如果无法恢复,“SKPaymentQueue”不会回复您。 – 2015-04-03 20:29:10

+0

我有一个日志声明,并有一个购买,以恢复 – Omer 2015-04-03 20:33:41

0

在这里,你恢复你的产品

func paymentQueueRestoreCompletedTransactionsFinished(queue: SKPaymentQueue) { 
    print("transactions restored") 
     for transaction in queue.transactions { 
      let t: SKPaymentTransaction = transaction 
      let prodID = t.payment.productIdentifier as String 
      if prodID == "product ID" { 
       print("action for restored") 
       queue.finishTransaction(t) 
       //code here what to restore 
     } 
    } 
}