Swift IAP本地化价格
Swift IAP localized price
我正在尝试通过标签将本地化价格添加到游戏的商店部分。我正在努力让它工作。
这是购买位代码的1部分,非常标准。
我的所有产品标识符都有一个枚举。
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 语句。
非常感谢您的任何回复
您正在寻找 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
}
}
}
}
我终于明白了。当按下其中一个购买按钮时,我基本上采用了用于识别产品的相同代码。我只是用标签详细信息替换了加载 buyProduct() 函数的行。例如我的价格标签之一。
func loadPriceLabel1() {
for product in products where product.productIdentifier == ProductID.product1.rawValue {
self.titleLabel.text = "\(product.localizedTitle)"
self.priceLabel1.text = "\(product.localizedPrice)"
etc
}
}
我在产品请求完成后加载标签功能,就在购买按钮启用之后。可能是一个略显笨拙的解决方案,但效果很好。如果有人有任何改进建议,请告诉我。
我在上面的 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)
}
}
}
我在美国,因此我的按钮标题是这样的:"Buy 100 coins: [=21=].99" - 对于该产品(购买),“100 个硬币”是本地化标题,“0.99 美元”是本地化价格。
同样,我也使用了他提供的相同扩展名(在他的问题中),我将其放在一个单独的 Swift 文件中:
import StoreKit
extension SKProduct {
func localizedPrice() -> String {
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.locale = self.priceLocale
return formatter.string(from: self.price)!
}
}
我正在尝试通过标签将本地化价格添加到游戏的商店部分。我正在努力让它工作。
这是购买位代码的1部分,非常标准。
我的所有产品标识符都有一个枚举。
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 语句。 非常感谢您的任何回复
您正在寻找 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
}
}
}
}
我终于明白了。当按下其中一个购买按钮时,我基本上采用了用于识别产品的相同代码。我只是用标签详细信息替换了加载 buyProduct() 函数的行。例如我的价格标签之一。
func loadPriceLabel1() {
for product in products where product.productIdentifier == ProductID.product1.rawValue {
self.titleLabel.text = "\(product.localizedTitle)"
self.priceLabel1.text = "\(product.localizedPrice)"
etc
}
}
我在产品请求完成后加载标签功能,就在购买按钮启用之后。可能是一个略显笨拙的解决方案,但效果很好。如果有人有任何改进建议,请告诉我。
我在上面的 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)
}
}
}
我在美国,因此我的按钮标题是这样的:"Buy 100 coins: [=21=].99" - 对于该产品(购买),“100 个硬币”是本地化标题,“0.99 美元”是本地化价格。
同样,我也使用了他提供的相同扩展名(在他的问题中),我将其放在一个单独的 Swift 文件中:
import StoreKit
extension SKProduct {
func localizedPrice() -> String {
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.locale = self.priceLocale
return formatter.string(from: self.price)!
}
}