我正在制作游戏,但我遇到了问题: 每当我在其中进行购买时,它都会返回我失败的交易。 我将此函数称为启动事务:
func buyProduct() {
let payment:SKPayment = SKPayment(product: product)
SKPaymentQueue.defaultQueue().addPayment(payment)
}
我在SandBox测试人员中获得了几个用户并免费为应用内购买设定了价格。 问题是什么?
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 :(得分:0)
你在真实设备上测试了吗?
在应用内购买不能在模拟器上运行,它会失败并出现这样的错误。
Error Domain=SKErrorDomain Code=0 "Cannot connect to iTunes Store" UserInfo=0x7f98b8fda180 {NSLocalizedDescription=Cannot connect to iTunes Store}
答案 1 :(得分:0)
IAP可以在模拟器6.0及更高版本上运行,而不是在下面(我认为它对你有利,因为你使用的是Swift)。
通常,您需要确切的错误信息来确定阻止这种情况的原因。事务对象中有一个错误属性,它有localizedDescription,它会告诉您确切的问题。
修改下面的语句以反映该信息,或者只是使用NSLog在控制台中报告错误。如果没有,你可以简单地中断该语句并检查transaction.error.localizedDescription的值。
0
错误有时可能与您的iphone设置一样简单,就像不同的国家商店一样简单(在这种情况下,您的下一个交易将在没有您做任何事情的情况下成功),有时可能会在您的iphone设置上登录非沙盒用户。
即使您没有错误信息,也可以提出一些问题:
showAlert("Error", message: "Ooops, there is transaction problem")
函数中有一个有效的SKProduct对象吗?您尚未在代码中实施SKRequestDelegate's didFailWithError方法 - 这可以告诉您产品请求有什么问题。如果您没有使用有效产品开始付款,则购买注定会失败。除了buyProduct()
之外,没有办法构建有效的SKProduct,然后成功request.start
。如果您需要有关如何集成IAP的分步教程 - 这里是my own tutorial和带有SWIFT和Objective C的video lecture series。它还附带SWIFT和Objective C的代码示例。