2015-06-09 50 views
0

我做了一個新的沙盒測試用戶來測試還原購買按鈕,但是當我按下它並把我的密碼或當我按下取消水平仍然解鎖。我不明白爲什麼會發生這種情況。有人可以看看我的代碼,並告訴我我做錯了什麼?謝謝!爲什麼當我沒有購買任何應用程序內購物時,購買會恢復?

func RestorePurchases() { 
    SKPaymentQueue.defaultQueue().restoreCompletedTransactions() 
    SKPaymentQueue.defaultQueue().addTransactionObserver(self) 
     println("Can't make purchases") 

    } 



    func paymentQueueRestoreCompletedTransactionsFinished(queue: SKPaymentQueue!) { 
    println("transactions restored") 


    var purchasedItemIDS = [] 
    for transaction in queue.transactions { 



     var t: SKPaymentTransaction = transaction as! SKPaymentTransaction 

     let prodID = t.payment.productIdentifier as String 

     switch prodID { 

     case "unlockLevelTwo": 

      println("restoreleveltwo") 
      NSUserDefaults().setBool(true, forKey: "Leavel2") 
      unlockLevelTwoPlease() 

     case "unlockLevelThree": 
      println("restorelevelthree") 
      NSUserDefaults().setBool(true, forKey: "Leavel3") 
      unlockLevelThreePlease() 

     default: 
      println("IAP not setup") 
       let alert = UIAlertView() 
       alert.title = "Oops" 
       alert.message = "There are no purchases to restore, please buy one" 
       alert.addButtonWithTitle("Cancel") 
       alert.show() 


     } 

    } 

} 

//EDITED MORE CODE.... 

func paymentQueue(queue: SKPaymentQueue!, updatedTransactions transactions: [AnyObject]!) { 
    println("Received Payment Transaction Response from Apple"); 




    for transaction:AnyObject in transactions { 
     var trans = transaction as! SKPaymentTransaction 
     println(trans.error) 


     switch trans.transactionState { 



      case .Purchased: 
       let prodID = p.productIdentifier as String 
      switch prodID { 

      case "unlockLevelTwo": 
        println("unlocksleveltwo") 

       NSUserDefaults().setBool(true, forKey: "Leavel2") 

       unlockLevelTwoPlease() 
      case "unlockLevelThree": 
       println("unlocklevelthree") 
       NSUserDefaults().setBool(true, forKey: "Leavel3") 
       unlockLevelThreePlease() 
      default: 
       println("") 
       } 

       queue.finishTransaction(trans) 
       break; 
      case .Failed: 
       println("Purchased Failed"); 
       queue.finishTransaction(trans) 
       break; 
     case .Restored: 
      let prodID = p.productIdentifier as String 
      switch prodID { 
     case "unlockLevelTwo": 
      println("unlocksleveltwo") 

      NSUserDefaults().setBool(true, forKey: "Leavel2") 

      unlockLevelTwoPlease() 
     case "unlockLevelThree": 
      println("unlocklevelthree") 
      NSUserDefaults().setBool(true, forKey: "Leavel3") 
      unlockLevelThreePlease() 
     default: 
      println("") 
     } 

      default: 
       println("default") 
       break; 
      } 
     } 
    } 

回答

1

我想你是錯誤的方法。

從Apple文檔中,paymentQueueRestoreCompletedTransactionsFinished告訴觀察者支付隊列已完成發送還原事務。在支付隊列處理完所有可恢復事務後調用此方法。您的應用程序無需在此方法中執行任何操作。我想你已經實施了paymentQueue:updatedTransactions。你應該檢查交易狀態SKPaymentTransactionStateRestored並解鎖你的關卡。

+0

所以我不需要paymentQueueRestoreCompletedTransactionsFinished,我可以使用.Restored? – coding22

+0

您不必爲付款QueueRestoreCompletedTransactionsFinished做任何事情。但是您應該爲transactionState SKPaymentTransactionStateRestored實現paymentQueue:updatedTransactions。試試看,讓我知道! – Leandro

+0

好嗎現在試試吧。 – coding22