Swift IOS 9: implementa una compra en la aplicación de la forma más simple posible

Estoy tratando de implementar una única compra en la aplicación en mi aplicación para eliminar anuncios, desde el lado de iTunes Connect es muy fácil, pero para la parte de código solo encuentro tutoriales con tableview y / o versión anterior de swift u objC

Agregué la compra dentro de la aplicación en iTunes Connect bajo la nueva versión de la aplicación, en la aplicación agregué una vista con 2 botones, uno para comprar y el otro para restaurar compras anteriores, pero no sé el código, para ahora la sección inapp de mi viewcontroller es

import StoreKit var productIDs: Array<String!> = [] var productsArray: Array<SKProduct!> = [] class ViewController: UIViewController, SKProductsRequestDelegate { 

¿Esto está bien? ¿Necesito las matrices si solo tengo una compra en la aplicación?

También agregué la compra de la aplicación en la sección de capacidades, pero tengo la marca de exclamación roja junto a la label "agregar derecho de compra de la aplicación a tu ID de aplicación", pero vi lo mismo para la sección del centro de juegos y las tablas de sorting y logros funciona así que creo que no tengo que preocuparme por eso

En cuanto a la eliminación del agregado, ¿cuál es la mejor manera?

Utilizo admob y estaba pensando en agregar una instrucción if en Appdelegate y poner la sección de crear y cargar interstital dentro. En el código hay alguna variable establecida en true si el usuario hizo esa compra o tengo que verificarla cada vez que la ¿El usuario abre la aplicación?

Gracias de antemano por sus respuestas

Lo siguiente funciona en Swift 2.

Primero, en Itunes Connect, crea un IAP

Importar Storekit

 import StoreKit 

Agregue los delegates de StoreKit

 class ViewController: UIViewController, SKProductsRequestDelegate, SKPaymentTransactionObserver { 

Declara tu ID de producto

 var product_id: NSString? override func viewDidLoad() { product_id = "YOUR_PRODUCT_ID" super.viewDidLoad() SKPaymentQueue.defaultQueue().addTransactionObserver(self) //Check if product is purchased if (NSUserDefaults.standardUserDefaults().boolForKey("purchased")){ // Hide ads adView.hidden = true } else { print("Should show ads...") } } 

Desbloquear contenido: esta es la acción del button que inicializará la compra

 @IBAction func unlockAction(sender: AnyObject) { print("About to fetch the product...") // Can make payments if (SKPaymentQueue.canMakePayments()) { let productID:NSSet = NSSet(object: self.product_id!); let productsRequest:SKProductsRequest = SKProductsRequest(productIdentifiers: productID); productsRequest.delegate = self; productsRequest.start(); println("Fetching Products"); }else{ print("Can't make purchases"); } } 

Métodos auxiliares

 func buyProduct(product: SKProduct){ println("Sending the Payment Request to Apple"); let payment = SKPayment(product: product) SKPaymentQueue.defaultQueue().addPayment(payment); } 

Métodos delegates para IAP

 func productsRequest (request: SKProductsRequest, didReceiveResponse response: SKProductsResponse) { let count : Int = response.products.count if (count>0) { var validProduct: SKProduct = response.products[0] as SKProduct if (validProduct.productIdentifier == self.product_id) { print(validProduct.localizedTitle) print(validProduct.localizedDescription) print(validProduct.price) buyProduct(validProduct); } else { print(validProduct.productIdentifier) } } else { print("nothing") } } func request(request: SKRequest!, didFailWithError error: NSError!) { print("Error Fetching product information"); } func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { print("Received Payment Transaction Response from Apple"); for transaction:AnyObject in transactions { if let trans:SKPaymentTransaction = transaction as? SKPaymentTransaction{ switch trans.transactionState { case .Purchased: print("Product Purchased"); SKPaymentQueue.defaultQueue().finishTransaction(transaction as SKPaymentTransaction) // Handle the purchase NSUserDefaults.standardUserDefaults().setBool(true , forKey: "purchased") adView.hidden = true break; case .Failed: print("Purchased Failed"); SKPaymentQueue.defaultQueue().finishTransaction(transaction as SKPaymentTransaction) break; case .Restonetworking: print("Already Purchased"); SKPaymentQueue.defaultQueue().restreCompletedTransactions() // Handle the purchase NSUserDefaults.standardUserDefaults().setBool(true , forKey: "purchased") adView.hidden = true break; default: break; } } } } 

Restaurar las compras

Agregue esto a una function:

 if (SKPaymentQueue.canMakePayments()) { SKPaymentQueue.defaultQueue().restreCompletedTransactions() } 

WMios responde en Swift 3 .

Primero, en Itunes Connect, crea un IAP

Importar Storekit

 import StoreKit 

Agregue los delegates de StoreKit

 class ViewController: UIViewController, SKProductsRequestDelegate, SKPaymentTransactionObserver { 

Declara tu ID de producto

 var product_id: String? override func viewDidLoad() { super.viewDidLoad() product_id = "YOUR_PRODUCT_ID" SKPaymentQueue.default().add(self) //Check if product is purchased if (UserDefaults.standard.bool(forKey: "purchased")){ // Hide ads //adView.hidden = true } else { print("Should show ads...") } } 

Desbloquear contenido: esta es la acción del button que inicializará la compra

 @IBAction func unlockAction(sender: AnyObject) { print("About to fetch the product...") // Can make payments if (SKPaymentQueue.canMakePayments()) { let productID:NSSet = NSSet(object: self.product_id!); let productsRequest:SKProductsRequest = SKProductsRequest(productIdentifiers: productID as! Set<String>); productsRequest.delegate = self; productsRequest.start(); print("Fetching Products"); }else{ print("Can't make purchases"); } } 

Métodos auxiliares

 func buyProduct(product: SKProduct){ print("Sending the Payment Request to Apple"); let payment = SKPayment(product: product) SKPaymentQueue.default().add(payment); } 

Métodos delegates para IAP

 func productsRequest (_ request: SKProductsRequest, didReceive response: SKProductsResponse) { let count : Int = response.products.count if (count>0) { let validProduct: SKProduct = response.products[0] as SKProduct if (validProduct.productIdentifier == self.product_id) { print(validProduct.localizedTitle) print(validProduct.localizedDescription) print(validProduct.price) buyProduct(product: validProduct); } else { print(validProduct.productIdentifier) } } else { print("nothing") } } func request(_ request: SKRequest, didFailWithError error: Error) { print("Error Fetching product information"); } func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { print("Received Payment Transaction Response from Apple"); for transaction:AnyObject in transactions { if let trans:SKPaymentTransaction = transaction as? SKPaymentTransaction{ switch trans.transactionState { case .purchased: print("Product Purchased"); SKPaymentQueue.default().finishTransaction(transaction as! SKPaymentTransaction) // Handle the purchase UserDefaults.standard.set(true , forKey: "purchased") //adView.hidden = true break; case .failed: print("Purchased Failed"); SKPaymentQueue.default().finishTransaction(transaction as! SKPaymentTransaction) break; case .restnetworking: print("Already Purchased"); SKPaymentQueue.default().restreCompletedTransactions() // Handle the purchase UserDefaults.standard.set(true , forKey: "purchased") //adView.hidden = true break; default: break; } } } } 

Restaurar las compras

Agregue esto a una function:

 if (SKPaymentQueue.canMakePayments()) { SKPaymentQueue.default().restreCompletedTransactions() }