2015-04-03 56 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 
     } 
    } 
}