如何访问SKPayment中产品的价格?

我有一个iPhone应用程序的应用程序内购买。

我想在UILabel中以用户本地货币显示价格。 为此,我需要一个variables的价格和货币。

如何使用SKPayment获得包括货币在内的价格? (如果SKPayment适用于此用途。)

我正在使用以下产品来实例化产品:

SKPayment *payment = [SKPayment paymentWithProductIdentifier:@"Identifier"]; 

预先感谢您的反馈!

使用NSLocaleCurrencySymbol + price.stringValue存在问题:它不处理不同语言环境的特性,例如。 无论他们是否把货币符号放在前面。 挪威,丹麦,瑞典和瑞士都把货币放在后面,比如说。 17.00Kr。 另外,大多数(?)欧洲国家使用“,”而不是“。”。 为小数,例如。 “2,99欧元”而不是“2.99欧元”。

更好的计划是使用NSNumberFormatter。 关键是SKProduct返回的“priceLocale”是Ed所展示的。 它给了NSNumberFormatter智能格式正确的价格。

通过使用Objective-C类别将新属性添加到SKProduct中,您也可以使这更容易。 将以下两个文件添加到您的项目中:


SKProduct + priceAsString.h:

 #import <Foundation/Foundation.h> #import <StoreKit/StoreKit.h> @interface SKProduct (priceAsString) @property (nonatomic, readonly) NSString *priceAsString; @end 

SKProduct + priceAsString.m:

 #import "SKProduct+priceAsString.h" @implementation SKProduct (priceAsString) - (NSString *) priceAsString { NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; [formatter setFormatterBehavior:NSNumberFormatterBehavior10_4]; [formatter setNumberStyle:NSNumberFormatterCurrencyStyle]; [formatter setLocale:[self priceLocale]]; NSString *str = [formatter stringFromNumber:[self price]]; [formatter release]; return str; } @end 

然后, #import "SKProduct+priceAsString.h"代码中input#import "SKProduct+priceAsString.h" ,你就可以在代码中使用product.priceAsString了。

确定这些信息的正确方法是使用一个SKProduct对象, SKProductResponse对象是在初始化的SKProductsRequest调用- (void) start后返回给委托的SKProduct对象中检索的。 像这样的东西:

 SKProductsRequest *req = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObject:@"Identifier"]]; req.delegate = self; [req start]; - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse: (SKProductsResponse *)response { [request autorelease]; if (response.products.count) { SKProduct *product = [response.products objectAtIndex:0]; NSLocale *priceLocale = product.priceLocale; NSDecimalNumber *price = product.price; NSString *description = product.localizedDescription; } } 

以下是使用extension的上述答案的Swift版本:

 extension SKProduct { func priceAsString() -> String { let formatter = NSNumberFormatter() formatter.formatterBehavior = .Behavior10_4 formatter.numberStyle = .CurrencyStyle formatter.locale = self.priceLocale return formatter.stringFromNumber(self.price)! as String } } 

这是Swift 3.0的解决scheme

 extension SKProduct { func priceAsString() -> String { let formatter = NumberFormatter() formatter.formatterBehavior = .behavior10_4 formatter.numberStyle = .currency formatter.locale = self.priceLocale return formatter.string(from: self.price)! as String } }