2015-07-11 73 views
0

我遇到了恢復購買產品的問題。每次用戶點擊恢復按鈕時,解鎖內容在檢查用戶是否登錄之前都有效,他是否購買了它。它只是解鎖。所以這裏是我的問題:這是怎麼回事?我添加具有恢復功能的代碼併購買一個。順便說一句代購完美。IAP恢復

func restorePurchases(){ 
     println("hello") 
     SKPaymentQueue.defaultQueue().addTransactionObserver(self) 
     SKPaymentQueue.defaultQueue().restoreCompletedTransactions() 
} 

func buyProduct(){ 
     SKPaymentQueue.defaultQueue().addTransactionObserver(self) 
     let payment:SKPayment = SKPayment(product: product) 
     SKPaymentQueue.defaultQueue().addPayment(payment) 
} 

func paymentQueue(queue: SKPaymentQueue!, restoreCompletedTransactionsFailedWithError error: NSError!) { 
     showAlert("error", message: "hoho") 
} 

func paymentQueue(queue: SKPaymentQueue!, updatedTransactions transactions: [AnyObject]!) { 
     for transaction:AnyObject in transactions { 
      if let trans:SKPaymentTransaction = transaction as? SKPaymentTransaction{ 
       switch trans.transactionState{ 
       case .Purchased: 
        self.removeAds() 
        SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction) 
        break 
       case .Failed: 
        showAlert("Error", message: "Transaction problem") 
        SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction) 
        break 
       case .Restored: 
        self.removeAds() 
        break 
       default: 
        break 
       } 
      } 
     } 
} 
+0

您的代碼是否到達.Restored案例?您是否在沙箱模式下與未購買解鎖的用戶進行過測試? –

+0

@BenFlynn是的,我測試了2個賬戶:1買了它,2買了什麼。所以我得到了解決方案,謝謝:) –

回答

0

我得到了答案! 主要問題是我沒有完成交易.Restored,所以我得到了同樣的東西。購買和.Restored。

 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: 
        self.removeAds() 
        SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction) 
        break 
       case .Failed: 
        showAlert("Error", message: "Transaction problem") 
        SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction) 
        break 
       default: 
        break 
       } 
      } 
     } 
} 

接下來 - 我沒有檢查客戶是否可以購買或不購買。但是,在此之前我做了觀察員:

 func restorePurchases(){ 
     SKPaymentQueue.defaultQueue().addTransactionObserver(self) 
     if SKPaymentQueue.canMakePayments(){ 
      SKPaymentQueue.defaultQueue().restoreCompletedTransactions() 
     } 
} 

所以,這很簡單:d 謝謝大家!