2014-09-15 5 views
0

Я пытаюсь добавить покупку In-app в своем приложении в первый раз. В сети нет руководства с быстрым языком. Итак, я начал конвертировать Obj-c в быстрый, но я не знаю, что означает эта строка и как я могу преобразовать ее в быстрый.В App Purchase swift

proUpgradeProduct = [products count] == 1 ? [[products firstObject] retain] : nil; 

из этого руководства: http://troybrant.net/blog/2010/01/in-app-purchases-a-full-walkthrough/

экстракт:

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response  
{ 
    NSArray *products = response.products; 
    proUpgradeProduct = [products count] == 1 ? [[products firstObject] retain] : nil; 
    if (proUpgradeProduct) 
    { 
     NSLog(@"Product title: %@" , proUpgradeProduct.localizedTitle); 
     NSLog(@"Product description: %@" , proUpgradeProduct.localizedDescription); 
     NSLog(@"Product price: %@" , proUpgradeProduct.price); 
     NSLog(@"Product id: %@" , proUpgradeProduct.productIdentifier); 
    } 

    for (NSString *invalidProductId in response.invalidProductIdentifiers) 
    { 
     NSLog(@"Invalid product id: %@" , invalidProductId); 
    }  

    // finally release the reqest we alloc/init’ed in requestProUpgradeProductData 
    [productsRequest release]; 

    [[NSNotificationCenter defaultCenter] postNotificationName:kInAppPurchaseManagerProductsFetchedNotification object:self userInfo:nil]; 
} 

Пожалуйста, если кто-нибудь знает In-App покупки руководство в стрижа это будет так приятно!

+1

Какой часть этого заявления путает? –

+0

это: proUpgradeProduct = [количество продуктов] == 1 – user3722523

ответ

2

Хитрость заключается в том, чтобы знать, какие ошибки говорят, но его фиксированной, введя вещи правильно используя OPTIONALS

var products = response.products 
var proUpgradeProductOpt:SKProduct? = products.count == 1 ? products.first as SKProduct? : nil 
if let proUpgradeProduct = proUpgradeProductOpt { 
    println("Product title: \(proUpgradeProduct.localizedTitle)") 
    println("Product description: \(proUpgradeProduct.localizedDescription)") 
    println("Product price: \(proUpgradeProduct.price)") 
    println("Product id: \(proUpgradeProduct.productIdentifier)") 
} 
+0

«не удалось найти перегрузку для ==, которая принимает предоставленные аргументы» – user3722523

+0

Попробуйте 'продукты! .count == 1' возможно? Кроме того, напишите больше кода, чтобы узнать, где создан массив продуктов – ccwasden

+0

проверить снова ответ обновлен – ccwasden

0

Сначала мне нужно импортировать StoreKit и Реализовано SKProductsRequestDelegate, SKPaymentTransactionObserver

//In this method check your products can make payments and then call the productsRequest 
func requestProductInfo(idProduct : String!) { 
    var productInfo : SKProduct? 

    if SKPaymentQueue.canMakePayments() { 

     let productRequest = SKProductsRequest(productIdentifiers: [idProduct]) 

     productRequest.delegate = self 
     productRequest.start() 
    } else { 
     NSLog("Can't Make Payments Right Now...! =(") 
    } 
} 



//MARK: Getting products from In-App Purchase (iTunes Connect) 
public func productsRequest(request: SKProductsRequest!, didReceiveResponse response: SKProductsResponse!) { 
    if response.products.count != 0 { 
     for product in response.products { 
      producsArray.append(product as! SKProduct) 
     } 
     println("Getting Products from iTunes Connect\(producsArray.count)") 

     //Call the method to purchase 
     buyProduct(producsArray[0]) 

    } else { 
     println("No Products....") 
    } 

} 

После того, как все предметы. Вы можете приобрести любой продукт. Только вам нужно реализовано public func paymentQueue(queue: SKPaymentQueue!, updatedTransactions transactions: [AnyObject]!)

//Purchase Product 
func buyProduct(product : SKProduct){ 
    println("Purchase....") 
    var payment = SKPayment(product: product) 
    SKPaymentQueue.defaultQueue().addTransactionObserver(self) 
    SKPaymentQueue.defaultQueue().addPayment(payment) 
} 

public func paymentQueue(queue: SKPaymentQueue!, updatedTransactions transactions: [AnyObject]!) { 
    for transaction in transactions as! [SKPaymentTransaction] { 
     switch transaction.transactionState { 
     case SKPaymentTransactionState.Purchased: 
      println("Transaction completed successfully.") 
      SKPaymentQueue.defaultQueue().finishTransaction(transaction) 
      SKPaymentQueue.defaultQueue().removeTransactionObserver(self) 


     case SKPaymentTransactionState.Failed: 
      println("Transaction Failed"); 
      SKPaymentQueue.defaultQueue().finishTransaction(transaction) 

     case SKPaymentTransactionState.Restored: 
      println("Restored....\(transaction.payment.productIdentifier)"); 
      SKPaymentQueue.defaultQueue().finishTransaction(transaction) 

     default: 
      println(transaction.transactionState.rawValue) 
     } 
    } 
} 

очень важно после Tu покупки любого выпуска продукции SKPaymentQueue вызова finishTransaction:

SKPaymentQueue.defaultQueue().finishTransaction(transaction)