2015-07-01 301 views
0

即時製作遊戲,我得到了問題: 每次我在其中進行購買時,它都會返回失敗的事務。 我調用這個函數來開始交易:在應用程序內購買免費InAppPurchase does not work

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

我有幾個用戶在沙盒測試人員,並設置價格。 什麼問題?

var product: SKProduct! 
//used in viewDidLoad 

SKPaymentQueue.defaultQueue().addTransactionObserver(self) 
self.getProductInfo() 

func productsRequest(request: SKProductsRequest!, didReceiveResponse response: SKProductsResponse!) { 
     let products = response.products 
     if (products.count != 0){ 
      product = products[0] as! SKProduct 
     } 
} 

func getProductInfo() { 
     if (SKPaymentQueue.canMakePayments()){ 
      let productID:NSSet = NSSet(object: "id.unique") 
      let request:SKProductsRequest = SKProductsRequest(productIdentifiers: productID as Set<NSObject>) 
      request.delegate = self 
      request.start() 
     } 

} 

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() 
        println("success") 
        SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction) 
        break 
       case .Failed: 
        println("failed") 
        showAlert("Error", message: "Ooops, there is transaction problem") 
        SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction) 
        break 
       case .Restored: 
        println("restored") 
        SKPaymentQueue.defaultQueue().restoreCompletedTransactions() 
        break 
       default: 
        break 
       } 
      } 
     } 
} 
+0

你能後的截圖在iTunes Connect中配置您的產品?謝謝 –

+0

檢查您的包標識符和產品標識符。然後仔細檢查發送給Apple服務器的產品標識符以供購買。 – NeverHopeless

回答

0

你在真實設備上測試過嗎?

在應用程序購買不能在模擬器上工作,它會失敗,像這樣的錯誤。

Error Domain=SKErrorDomain Code=0 "Cannot connect to iTunes Store" UserInfo=0x7f98b8fda180 {NSLocalizedDescription=Cannot connect to iTunes Store} 
0

IAP可以在模擬器6.0及以上版本中運行,不會低於(我認爲這對您是正面的,因爲您使用的是Swift)。

通常情況下,您需要確切的錯誤信息來決定是什麼阻止了這一點。在事務對象中有一個錯誤屬性,它有localizedDescription,它會告訴你確切的問題。

修改以下語句以反映該信息,或者僅使用NSLog在控制檯中報告錯誤。如果沒有,您可以簡單地打破該語句並檢查transaction.error.localizedDescription的值。

showAlert("Error", message: "Ooops, there is transaction problem") 

錯誤,可有時不同的國家店比你的iPhone設置(在這種情況下,你的下一個交易將沒有你做任何事情成功),有時可有非沙箱用戶簽約在您的iPhone設置爲簡單。

即使你沒有錯誤信息,有些問題要問是:

  • 簡單的檢查:你的所有itunesconnect簽訂的合同?
  • 最有可能的原因:您在buyProduct()函數中有一個有效的SKProduct對象嗎?你的代碼中沒有實現SKRequestDelegate's didFailWithError方法 - 它可以告訴你產品請求有什麼問題。如果您沒有開始使用有效產品付款,購買註定會失敗。除了request.start之外,沒有辦法構建有效的SKProduct,其次是成功的didReceiveResponse

如果您需要關於如何整合IAP分步教程 - 這裏是my own tutorial與SWIFT和Objective C的video lecture series它也伴隨着代碼樣本SWIFT和Objective C.