2016-01-20 1 views
0

Мое приложение включает некоторые покупки In-App и всякий раз, когда приложение открывается, мой телефон продолжает просить меня войти в iTunes Store. Как остановить это?iPhone не перестает появляться «Войдите в iTunes Store» после того, как Xcode Project включает в себя IAP

override func viewDidLoad() { 
    super.viewDidLoad() 

    SKPaymentQueue.defaultQueue().addTransactionObserver(self) 

    // Do any additional setup after loading the view, typically from a nib. 
    // Set IAPS 

     if(SKPaymentQueue.canMakePayments()) { 
      print("In-App Purchases Enabled, Loading") 
      let productID:NSSet = NSSet(objects: "my bundle ;)") 
      let request: SKProductsRequest = SKProductsRequest(productIdentifiers: productID as! Set<String>) 
      request.delegate = self 
      request.start() 
     } else { 
      print("Please enable In-App Purchases.") 
    } 

    showInStore() 

} 

override func viewDidDisappear(animated: Bool) { 

    SKPaymentQueue.defaultQueue().removeTransactionObserver(self) 
} 


    @IBAction func btnRemoveAds(sender: UIButton) { 
    for product in list { 
     let prodID = product.productIdentifier 
     if(prodID == "my bundle") { 
      p = product 
      buyProduct() 

// removeAds() перерыв } еще если (PRODID == "узелок") {

  w = product 
      buyProduct() 
      break 
     } 
    } 

} 


    func removeAds() { 

    self.view.willRemoveSubview(self.adView) 
    self.adView.hidden = true 
} 

    @IBAction func RestorePurchases(sender: UIButton) { 
    SKPaymentQueue.defaultQueue().restoreCompletedTransactions() 
} 

var list = [SKProduct]() 
var p = SKProduct() 
var w = SKProduct() 

func buyProduct() { 
    print("Buy " + p.productIdentifier) 
    let pay = SKPayment(product: p) 
    SKPaymentQueue.defaultQueue().addPayment(pay as SKPayment) 
} 

func productsRequest(request: SKProductsRequest, didReceiveResponse response: SKProductsResponse) { 
    print("Requesting Product") 
    let myProduct = response.products 

    for product in myProduct { 
     print("Product Added") 
     print(product.productIdentifier) 
     print(product.localizedTitle) 
     print(product.localizedDescription) 
     print(product.price) 

     list.append(product) 

    } 


} 

func paymentQueueRestoreCompletedTransactionsFinished(queue: SKPaymentQueue) { 
    print("Purchases Restored") 

    _ = [] // Swift 2 made me replace with a _ : orginal is let purchasedItemIDS[] 
    for transaction in queue.transactions { 
     let t: SKPaymentTransaction = transaction 

     let prodID = t.payment.productIdentifier as String 

     switch prodID { 
     case "my bundle ;)": 
      print("Removing Ads") 
      removeAds() 
      systemStatus.text = "Ads have been removed on this device! " 
      systemStatus.textColor = UIColor.greenColor() 


     default: 
      print("In-App Purchases Not Setup") 
     } 

    } 
} 

func paymentQueue(queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { 
    print("Add Payment") 

    for transaction:AnyObject in transactions { 
     let trans = transaction as! SKPaymentTransaction 
     print(trans.error) 

     switch trans.transactionState { 

     case .Purchased: 
      print("Unlock In-App Purchases Here.") 
      print(p.productIdentifier) 
      let prodID = p.productIdentifier as String 
      switch prodID { 
      case "my bundle ;)": 
       print("Remove Ads") 
       removeAds() 
       systemStatus.text = "Ads have been removed on this device! " 
       systemStatus.textColor = UIColor.greenColor() 


      default: 
       print("In-App Purchases Not Setup") 
      } 

      queue.finishTransaction(trans) 
      break 
     case .Failed: 
      print("Purchase Error") 
      queue.finishTransaction(trans) 
      break 
     default: 
      print("Nothing") 
      break 

     } 
    } 
} 

func finishTransaction(trans:SKPaymentTransaction) 
{ 
    print("Transactions Completed.") 
    SKPaymentQueue.defaultQueue().finishTransaction(trans) 
    removeAds() 
    systemStatus.text = "Ads have been removed on this device! " 
    systemStatus.textColor = UIColor.greenColor() 


} 

func paymentQueue(queue: SKPaymentQueue, removedTransactions transactions: [SKPaymentTransaction]) 
{ 
    print("Transactions Removed") 
} 
+0

Посмотрите на http://stackoverflow.com/questions/4988663/skpaymentqueue-addtransactionobserver-asking-for-app-store-password-on-startup-a – Michael

+0

Уже сделал это :( –

+0

Возможно, вам стоит опубликовать свой код. Знаете ли вы, что на самом деле вызывается 'finishTransaction'? Это может также вызвать исключение. Что вы сделали для устранения неполадки? – Michael

ответ

0

Глядя на ваш код теперь вы делаете первые 2 ошибки, которые я упомянул.

1) Вы должны добавить наблюдателя транзакции при запуске приложения или при запуске магазина. Перейдите к своим функциям покупки/восстановления и вытащите эту строку

SKPaymentQueue.defaultQueue().addTransactionObserver(self) 

и переместите его для просмотраDidLoad. Многие учебники учат вас этому неправильно.

2) Я не вижу код, в котором вы удаляете наблюдателя транзакций. Вам нужно позвонить

SKPaymentQueue.defaultQueue().removeTransactionObserver(self) 

при выходе из вашего магазина. Это, скорее всего, вызовет проблемы.

3) В общем, ваш код немного грязный. Например, в функции делегата «didFinishTransaction» вы вызываете метод для удаления объявлений. Это не место для этого.

Посмотрите на этот ответ, чтобы увидеть, как можно структурировать ваш код лучше

Restore Purchase : Non-Consumable

Оригинальный ответ:

Довольно распространенным явлением с ИПД, если сделано неправильно, это в основном означает, что старый сделка торчит. В вашем коде IAP нужно иметь в виду несколько вещей.

1) убедитесь, что вы добавили транзакционный сервер сразу после запуска приложения. Большинство учебников добавляют его каждый раз, когда приобретается предмет, который не является тем, что Apple рекомендует.

2) удалите наблюдателя транзакции после закрытия приложения.

3) убедитесь, что вы звоните в транзакцию завершения каждый раз, когда совершается покупка.

Трудно помочь, не видя ваш код.

+0

sadly did not work = ( –

+0

Это отстой. Вы должны опубликовать свой код, его – crashoverride777

+0

Я думал, что сделал, извините, я сделал это сейчас! –

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