应用内购买不起作用
InAppPurchase doesnt work
我正在制作游戏,遇到了问题:
每次我在里面购物,它 returns 我交易失败。
我调用这个函数来开始交易:
func buyProduct() {
let payment:SKPayment = SKPayment(product: product)
SKPaymentQueue.defaultQueue().addPayment(payment)
}
我在 SandBox-testers 中获得了几个用户,并设置了免费的应用内购买价格。
有什么问题?
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
}
}
}
}
你在真机上测试过吗?
应用内购买在模拟器上不起作用,会失败并出现类似这样的错误。
Error Domain=SKErrorDomain Code=0 "Cannot connect to iTunes Store" UserInfo=0x7f98b8fda180 {NSLocalizedDescription=Cannot connect to iTunes Store}
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 and a video lecture series 以及 SWIFT 和 Objective C。它还附带 SWIFT 和 Objective C.
的代码示例
我正在制作游戏,遇到了问题: 每次我在里面购物,它 returns 我交易失败。 我调用这个函数来开始交易:
func buyProduct() {
let payment:SKPayment = SKPayment(product: product)
SKPaymentQueue.defaultQueue().addPayment(payment)
}
我在 SandBox-testers 中获得了几个用户,并设置了免费的应用内购买价格。 有什么问题?
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
}
}
}
}
你在真机上测试过吗?
应用内购买在模拟器上不起作用,会失败并出现类似这样的错误。
Error Domain=SKErrorDomain Code=0 "Cannot connect to iTunes Store" UserInfo=0x7f98b8fda180 {NSLocalizedDescription=Cannot connect to iTunes Store}
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
,后面没有办法构造出有效的SKProductdidReceiveResponse
.
如果您需要有关如何集成 IAP 的分步教程 - 这里是 my own tutorial and a video lecture series 以及 SWIFT 和 Objective C。它还附带 SWIFT 和 Objective C.
的代码示例