我想找出用户的App Store位置。这意味着他们在美国,澳大利亚(澳大利亚)商店。使用以下代码。
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
Books = response.products;
if ([SKPaymentQueue canMakePayments] && [response.products count]>0) {
}
for (SKProduct *book in Books) {
NSLocale *locat=[NSLocale currentLocale];
NSString *strlocate=[locat objectForKey:NSLocaleCountryCode];
NSLog(@"\n\n\n Device country== %@ \n\n\n",strlocate);
NSLocale* storeLocale = book.priceLocale;
NSString *storeCountry = (NSString*)CFLocaleGetValue((CFLocaleRef)storeLocale, kCFLocaleCountryCode);
NSLog(@"\n\n\n store country== %@ \n\n\n",storeCountry);
}
}
如果图书等级为1,我想要明智的是基于应用程序商店价格矩阵表US $ 0.99 AUD 0.99 JPY 85。
我在模拟器中测试过。我在系统中的iTunes,appstore和safari应用程序中更改了国家/地区名称。但我只获得美国国家代码。
编辑: 设置 - >常规 - >国际 - >地区格式 - >国家
我在设备中测试过:设备国家/地区仅更改了。商店国家显示美国国家代码和价格。我想在开始购买时间之前存储国家/地区代码。
根据货币波动一次改变价格多少天? 是否为已知/更新提供任何api /查询波动价格?
我的inapp操作创建了一个类。在进行inapp操作之前,我想向用户显示当地价格,并在inapp操作中反映相同的价格效果。
我显示从我的服务器列出的免费书籍和付费书籍列表。因为我显示每个项目的价格。那些项目价格在处理appstore时会显示美元价格。如果appstore显示价格,我也想显示。所以我想将国家代码发送到我的服务器,我的服务器响应该国家相关的价格表和货币符号..
答案 0 :(得分:31)
productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:prodcutIdentifier];
productsRequest.delegate = self;
// This will trigger the SKProductsRequestDelegate callbacks
[productsRequest start];
这将调用您的委托功能。完成上述操作后,它将最终自动调用下面提到的函数。这是发送的应用商店请求最终确定的位置。
(void)requestDidFinish:(SKRequest *)request
{
SKProduct *book = [Books objectAtIndex:0];
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
[numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[numberFormatter setLocale:book.priceLocale];
NSLocale* storeLocale = book.priceLocale;
NSString *storeCountry = (NSString*)CFLocaleGetValue((CFLocaleRef)storeLocale, kCFLocaleCountryCode);
}
根据您的兴趣提供区域设置和国家/地区详细信息。
答案 1 :(得分:27)
这本书是SKProduct:
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
[numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[numberFormatter setLocale:book.priceLocale];
NSString *formattedPrice = [numberFormatter stringFromNumber:book.price];
NSLog(@"%@", formattedPrice);
简单地询问是否有任何不清楚的地方!
此致
答案 2 :(得分:10)
一行代码:
product
是SKProduct
对象实例:
NSString *price = [NSString stringWithFormat:@"%@%@ %@", [product.priceLocale objectForKey:NSLocaleCurrencySymbol], product.price, [product.priceLocale objectForKey:NSLocaleCurrencyCode]];
<强>结果:强>
$ 1.39 USD
答案 3 :(得分:6)
我用这个:
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
[numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[numberFormatter setLocale:basicProduct.priceLocale];
NSString *formattedString = [numberFormatter stringFromNumber:basicProduct.price];
NSLog(@"product with currency:%@", formattedString);
[retDict setObject:formattedString forKey:@"basic_price"];
NSLog(@"Product title: %@" , basicProduct.localizedTitle);
NSLog(@"Product description: %@" , basicProduct.localizedDescription);
NSLog(@"Product price: %@" , basicProduct.price);
NSLog(@"Product id: %@" , basicProduct.productIdentifier);
委托方法中的:
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
这可以在用户点击开始购买之前完成..
答案 4 :(得分:5)
您还可以了解有关区域设置对象的更多信息 我想你也可以使用NSLocale的货币区域设置,如下所示
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[formatter setLocale:[NSLocale currentLocale];
NSString *localizedMoneyString = [formatter stringFromNumber:myCurrencyNSNumberObject];
并且您将获得正确的格式化货币字符串,如下所示
SKProduct *product = [self.products objectAtIndex:indexPath.row];
NSNumberFormatter *formatter = [[[NSNumberFormatter alloc] init] autorelease];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[formatter setLocale:product.priceLocale];
currencyString = [formatter stringFromNumber:product.price];
我也在我的应用程序中试过这个
NSDecimalNumber *amount = [NSDecimalNumber decimalNumberWithString:@"50.00"];
NSNumberFormatter *currencyFormat = [[NSNumberFormatter alloc] init];
NSLocale *locale = [NSLocale currentLocale];
[currencyFormat setNumberStyle:NSNumberFormatterCurrencyStyle];
[currencyFormat setLocale:locale];
NSLog(@"Amount with symbol: %@", [currencyFormat stringFromNumber:amount]);//Eg: $50.00
NSLog(@"Current Locale : %@", [locale localeIdentifier]);//Eg: en_US
希望它会帮助你
答案 5 :(得分:5)
在Swift 3中:
let numberFormatter = NumberFormatter()
numberFormatter.formatterBehavior = .behavior10_4
numberFormatter.numberStyle = .currency
numberFormatter.locale = product.priceLocale
let formattedPrice = numberFormatter.string(from: product.price)
答案 6 :(得分:3)
在产品中的设备响应中,您收到了正确的product.price和product.priceLocale for AppStore帐户,您当前已登录。因此,如果您使用此区域设置格式化收到的价格,您将获得类似“0.99 $”,“33”的字符串,0руб。“等等。
答案 7 :(得分:0)
使用https://github.com/bizz84/SwiftyStoreKit,有
SKProduct中的本地化价格
直接使用此成员变量是可以的,不需要任何代码转换!
App Store会根据当前用户的App Store国家/地区,为您的应用响应正确的本地价格。如何更改:
我已经对行为进行了测试,将国家从香港更改为台湾后,这是正确的,我可以看到第1层的价格从8港币更改为30港币。 (港元为新台币)
答案 8 :(得分:-4)
create macro first then use it
#define CURRENCY_SYMBOL [[NSLocale currentLocale] objectForKey:NSLocaleCurrencySymbol]
NSLog(@"%@ %.2f",CURRENCY_SYMBOL,25.50);