En la compra de aplicaciones / conversión Swift

Estoy tratando de convertir el tutorial en la compra de aplicaciones en Swift ( http://www.tutorialspoint.com/ios/ios_en_app_purchase.htm )

Tengo algunos problemas … Para el siguiente ejemplo, ¿no debería llamar a la function "productsRequest"? ¡Esto no sucede! ¿Debería llamar o no?

Otro problema es la línea (function purchaseMyProduct), muéstrame el error de delegado .. ¿Tiene algún problema en la vista de statement?


     var defaultQueue: SKPaymentQueue = SKPaymentQueue.addTransactionObserver (self)

Gracias

Bonfs


Ejemplo:

import UIKit import StoreKit class ViewController: UITableViewController, SKProductsRequestDelegate,SKPaymentTransactionObserver { let produto_value = "com.tutorialTest.testApp.testProduct" override func viewDidLoad() { super.viewDidLoad() self.fetchAvailableProducts() // call } func fetchAvailableProducts() { let productID:NSSet = NSSet(object: self.produto_value); let productsRequest:SKProductsRequest = SKProductsRequest(productIdentifiers: productID); productsRequest.delegate = self; productsRequest.start(); } func productsRequest (request: SKProductsRequest, didReceiveResponse response: SKProductsResponse) { println("here!") var count : Int = response.products.count if (count>0) { var validProducts = response.products var validProduct: SKProduct = response.products[0] as SKProduct if (validProduct.productIdentifier == self.produto_value) { println(validProduct.localizedTitle) println(validProduct.localizedDescription) println(validProduct.price) } else { println(validProduct.productIdentifier) } } else { println("nothing") } } func canMakePurchases() -> Bool { return SKPaymentQueue.canMakePayments() } func purchaseMyProduct(product: SKProduct) { if (self.canMakePurchases()) { var payment: SKPayment = SKPayment(product: product) var defaultQueue: SKPaymentQueue = SKPaymentQueue.addTransactionObserver(self) defaultQueue.addPayment(payment) } else { println("Purchases are disabled in your device") } } func paymentQueue(queue: SKPaymentQueue!, updatedTransactions transactions: [AnyObject]!) { for transaction:AnyObject in transactions { if let trans:SKPaymentTransaction = transaction as? SKPaymentTransaction{ switch trans.transactionState { case .Purchased: SKPaymentQueue.defaultQueue().finishTransaction(transaction as SKPaymentTransaction) break; case .Failed: SKPaymentQueue.defaultQueue().finishTransaction(transaction as SKPaymentTransaction) break; // case .Restonetworking: //[self restreTransaction:transaction]; default: break; } } } } } 

A continuación, le indicamos cómo puede agregar el pago a la queue pnetworkingeterminada. Puede omitir la creación de la variable temporal.

 SKPaymentQueue.defaultQueue().addPayment(payment) 

También para la queue pnetworkingeterminada, no es necesario agregar el observador de transacción cada vez que compra un producto. Agrego el observador de transacción para la queue pnetworkingeterminada en mi init.

 SKPaymentQueue.defaultQueue().addTransactionObserver(self) 

Pruebe la llamada de la siguiente manera:

  func purchaseMyProduct(product: SKProduct) { if (self.canMakePurchases()) { println("Purchases are allowed ...") var payment: SKPayment = SKPayment(product: product) var defaultQueue: SKPaymentQueue = SKPaymentQueue () defaultQueue.addTransactionObserver(self) defaultQueue.addPayment(payment) } else { println("Purchases are disabled in your device") } } 

Swift 2.2

Si agrega el SKPaymentTransactionObserver , debe agregar al less esta function para hacer frente a las transactions.

 func paymentQueue(queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { // deal with the transactions here }