如何访问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 } }