2015-08-18 2 views
0

Я пытаюсь сделать нерасходуемый при покупке приложения. У меня есть все мои методы настройки, и он работал отлично пару дней назад, но теперь он всегда терпит неудачу.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. Я попытался совершить транзакцию с несколькими пользователями песочницы, и все они терпят неудачу.

Я использовал учебник для написания всего этого кода, поэтому я действительно не знаю обо всем, что делает этот код, и если это самый эффективный способ совершить покупку в приложении.

Может кто-нибудь сказать мне, есть ли ошибка в моем коде или если есть лучший способ сделать это.

Спасибо!

ответ

0

Я запускаю Xcode Version 6.4 (6E35b), и это ошибка симулятора. Просто запустите приложение на реальном устройстве, и он отлично работает.

Смежные вопросы