Ios应用内购买总是失败
我正在尝试进行非消耗品的应用程序内购买。我已经设置好了所有的方法,几天前它运行得很好,但现在总是失败Ios应用内购买总是失败,ios,swift,in-app-purchase,Ios,Swift,In App Purchase,我正在尝试进行非消耗品的应用程序内购买。我已经设置好了所有的方法,几天前它运行得很好,但现在总是失败 override func viewDidLoad() { super.viewDidLoad() //In-App Prurchase Transaction Observer SKPaymentQueue.defaultQueue().addTransactionObserver(self) self.getProductInfo() } 在我的view
override func viewDidLoad() {
super.viewDidLoad()
//In-App Prurchase Transaction Observer
SKPaymentQueue.defaultQueue().addTransactionObserver(self)
self.getProductInfo() }
在我的viewDidLoad中,我添加了事务观察器,然后处理其他所有事情
//In-App Prurchase
func productsRequest(request: SKProductsRequest!, didReceiveResponse response: SKProductsResponse!) {
let products = response.products
if products.count != 0{
product = products[0] as! SKProduct
}
}
//In-App Prurchase
func getProductInfo(){
if SKPaymentQueue.canMakePayments(){
let productID:NSSet = NSSet(object: "premiunAccountProductID")
let request:SKProductsRequest = SKProductsRequest(productIdentifiers: productID as Set<NSObject>)
request.delegate = self
request.start()
}
}
//In-App Prurchase
@IBAction func goPremiunPressed(sender: AnyObject) {
if IJReachability.isConnectedToNetwork(){//check for internet
let payment:SKPayment = SKPayment(product: product)
SKPaymentQueue.defaultQueue().addPayment(payment)
} else{ // no internet connection
let alertview = JSSAlertView()
alertview.show(self, title: "Sorry", text: "You need to be connected to the internet in order to buy a premium account", color: UIColor(hex: "#e74c3c"), iconImage: UIImage(named: "Cancel"))
alertview.setTextTheme(.Light)
}
}
//In-App Prurchase
func paymentQueue(queue: SKPaymentQueue!, updatedTransactions transactions: [AnyObject]!) {
for transaction:AnyObject in transactions{
if let trans:SKPaymentTransaction = transaction as? SKPaymentTransaction{
switch trans.transactionState{
case .Purchased:
UserPreferences.userDefaults.setBool(true, forKey: "isPremium")
UserPreferences.userDefaults.synchronize()
println("Transanction Succeded. Is premium is now \(UserPreferences.isPremium)")
SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction)
break
case .Failed:
let alertview = JSSAlertView()
alertview.show(self, title: "Sorry", text: "There was an error completing your transaction, please try again later.", color: UIColor(hex: "#e74c3c"), iconImage: UIImage(named: "Cancel"))
alertview.setTextTheme(.Light)
println("Transaction Failed")
SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction)
break
case .Restored:
SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
default:
break
}
}
}
}
//应用程序内PrurCase
func productsRequest(请求:SKProductsRequest!,DID接收方响应:SKProductsResponse!){
让产品=响应.products
如果products.count!=0{
产品=产品[0]为!SKProduct
}
}
//应用内普鲁尔凯斯
func getProductInfo(){
如果SKPaymentQueue.canMakePayments(){
让productID:NSSet=NSSet(对象:“premiunAccountProductID”)
let请求:SKProductsRequest=SKProductsRequest(产品标识符:设置的产品ID)
request.delegate=self
request.start()
}
}
//应用内普鲁尔凯斯
@iAction func goPremiunPressed(发送方:AnyObject){
如果IJReachability.isconnectedtonework(){//请检查internet
let payment:SKPayment=SKPayment(产品:产品)
SKPaymentQueue.defaultQueue().addPayment(付款)
}else{//没有internet连接
让alertview=JSSAlertView()
alertview.show(self,标题:“对不起”,文本:“您需要连接到互联网才能购买高级帐户”,颜色:UIColor(十六进制:#e74c3c),图标:UIImage(命名为:“取消”))
alertview.setTextTheme(.Light)
}
}
//应用内普鲁尔凯斯
func paymentQueue(队列:SKPaymentQueue!,更新的交易:[AnyObject]!){
对于事务:事务中的任何对象{
如果让交易:SKPaymentTransaction=交易为?SKPaymentTransaction{
开关trans.transactionState{
案例。购买:
UserPreferences.userDefaults.setBool(true,forKey:“isPremium”)
UserPreferences.userDefaults.synchronize()
println(“交易成功。现在是溢价\(UserPreferences.isPremium)”)
SKPaymentQueue.defaultQueue().finishTransaction(事务为!SKPaymentTransaction)
打破
案例。失败:
让alertview=JSSAlertView()
alertview.show(self,标题:“对不起”,文本:“完成交易时出错,请稍后再试。”,颜色:UIColor(十六进制:#e74c3c),图标:UIImage(名为:“取消”))
alertview.setTextTheme(.Light)
println(“交易失败”)
SKPaymentQueue.defaultQueue().finishTransaction(事务为!SKPaymentTransaction)
打破
案件.恢复:
SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
违约:
打破
}
}
}
}
所以每次我按下“goPremium”按钮,都需要几秒钟的时间,然后就转到失败的案例。我尝试与多个沙盒用户进行交易,但都失败了
我使用了一个教程来编写所有这些代码,因此我并不真正了解这些代码所做的所有事情,或者这是否是进行应用内购买的最有效方法
有人能告诉我我的代码中是否有错误,或者是否有更好的方法来实现这一点
谢谢 我正在运行Xcode版本6.4(6E35b),这是一个模拟器错误。只要在真正的设备上运行应用程序,它就能完美地工作