2015-06-06 68 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