Я пытаюсь сделать нерасходуемый при покупке приложения. У меня есть все мои методы настройки, и он работал отлично пару дней назад, но теперь он всегда терпит неудачу.Ios в покупке приложения всегда сбой
override func viewDidLoad() {
super.viewDidLoad()
//In-App Prurchase Transaction Observer
SKPaymentQueue.defaultQueue().addTransactionObserver(self)
self.getProductInfo() }
В моем представленииDidLoad Я добавил наблюдателя транзакций, а затем обработал все остальное.
//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
}
}
}
}
Таким образом, каждый раз, когда я нажмите кнопку «goPremium», это занимает несколько секунд, а затем просто переходит к делу .Failed. Я попытался совершить транзакцию с несколькими пользователями песочницы, и все они терпят неудачу.
Я использовал учебник для написания всего этого кода, поэтому я действительно не знаю обо всем, что делает этот код, и если это самый эффективный способ совершить покупку в приложении.
Может кто-нибудь сказать мне, есть ли ошибка в моем коде или если есть лучший способ сделать это.
Спасибо!