2015-07-01 403 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.