2015-06-06 95 views
1

我正嘗試通過標籤將本地化價格添加到我的遊戲的我的店鋪部分。我正在努力讓它工作。Swift IAP本地化價格

這是購買位的代碼的一部分,其相當標準。

我有一個枚舉爲我所有的產品標識符。

enum ProductID: String { 
    case product1 
    case product2 
} 

和標準付款代碼。

func paymentQueue(queue: SKPaymentQueue!, updatedTransactions transactions: [AnyObject]!) { 
println("add payment") 

    for transaction in transactions { 

    switch transaction.transactionState { 

    case .purchased: 
     print("buy, ok unlock iap here") 
     print(p.productIdentifier) 

     let productIdentifier = transaction.payment.productIdentifier 

     switch productIdentifier { 
     case ProductID.product1.rawValue: 
      print("Product 1 bought") 
      //do something 
     case ProductID.product2.rawValue: 
      print("Product 2 bought") 
      //do something 
     default: 
      print("IAP not setup") 
    } 
} 

我用下面的擴展獲取本地化的價格,再漂亮的鍋爐板

extension SKProduct { 

    var localizedPrice: String { 
     let formatter = NSNumberFormatter() 
     formatter.numberStyle = .CurrencyStyle 
     formatter.locale = self.priceLocale 
     return formatter.stringFromNumber(self.price) ?? "\(price)" 
    } 
} 

所以在我的價格標籤是產品按鈕下面我如何得到有關添加本地化的價格

每個產品
priceProduct1Label.text = "\(?.localizedPrice)" 
priceProduct2Label.text = "\(?.localizedPrice)" 

我該如何輸入問號?我閱讀的視頻和教程要麼不告訴你,要麼他們不使用產品的switch語句。 非常感謝您事先的任何答覆

回答

1

我想通了最後。當我按下其中一個購買按鈕時,我基本上採用了用於識別產品的相同代碼。我只是用標籤細節替換了加載buyProduct()函數的行。比如我的一個價格標籤的例子。

func loadPriceLabel1() { 
    for product in products where product.productIdentifier == ProductID.product1.rawValue { 

     self.titleLabel.text = "\(product.localizedTitle)" 
     self.priceLabel1.text = "\(product.localizedPrice)" 
     etc   
    } 
} 

在購買按鈕啓用後,我在產品請求完成後加載標籤功能。可能是笨重一面的解決方案,但效果很好。如果有人有任何改進建議,請讓我知道。

0

您正在尋找的SKProduct,它的實例可以加載使用一個或多個產品標識符通過SKProductsRequest

import StoreKit 

class MyStore: NSObject, SKProductsRequestDelegate { 

    func loadProductsForProductIdentifiers(productIdentifiers: Set<String) { 

     let productRequest = SKProductsRequest(productIdentifiers: productIdentifiers) 
     productRequest.delegate = self ///< Make sure to set a delegate 
     productRequest.start() 
    } 

    // MARK: - SKProductsRequestDelegate 

    func productsRequest(request: SKProductsRequest!, didReceiveResponse response: SKProductsResponse!) { 

     for object in response.products { 
      if let product = object as? SKProduct { 
       // Store these products and use their `productIdentifier` property to identify them 
      } 
     } 
    } 
} 
+0

我用這2這些教程基本相同(https://www.airpair.com/ios/posts/swift-storekit-in-app-purchases),(http://www.seemuapps.com/tutorial-swift-in-app -purchases)。我所有的購買工作都很完美。我只是不明白如何獲取單個項目的價格,以便在我的標籤中顯示價格1.所以我正在尋找正確的方式來編寫「self.priceLabel1」.text =「\(Product1.localizedPrice( ))」。我基本上爲產品1編寫了什麼,我嘗試了產品ID的NSSet等,但沒有運氣。再次感謝,我感謝你的幫助 – crashoverride777

+0

檢查我的評論,我改變它。我已經要求產品等,並獲取信息,所以我不確定你的意思。我正在製作一個SpriteKit遊戲,其中有5個產品按鈕,下面有5個價格標籤。我只是不明白如何編寫這5個標籤的代碼來獲得它們每個的正確價格。 – crashoverride777

+0

如果您已經有產品的參考,爲什麼不只是'self.priceLabel.text = product1.localizedPrice()'? –

0

我在crashoverride777的答案上面提供了一個輕微的變化,而不是一個標籤,一個按鈕,並且不僅繪製了iTunes Connect的本地化價格,還繪製了構成按鈕標題的其他內容 - localizedTitle:

func loadBuy00ButtonTitle() { 
    for product in productArray { 
     let prodID = product.productIdentifier 
     if(prodID == "com.YourCompanyNameGoesHere.YourAppNameGoesHere.buy00Button") { 
      let prod = product 
      buy00Button.setTitle("Buy \(prod.localizedTitle): \(prod.localizedPrice())", for: .normal) 
     } 
    } 
} 

我在美國,因此我的按鈕標題是這樣的:「買100個金幣:$ 0.99」 - 在該產品(購買)「100枚硬幣」是本地化的標題和「$ 0.99」是本地化的價格。

有少許變化,我也一樣,用他提供相同的擴展名(在他的問題),我將在一個單獨的斯威夫特文件

並再次:

import StoreKit 

extension SKProduct { 

    func localizedPrice() -> String { 
     let formatter = NumberFormatter() 
     formatter.numberStyle = .currency 
     formatter.locale = self.priceLocale 
     return formatter.string(from: self.price)! 
    } 

} 

Ben Dodson's SKProduct localized price extension in Swift