如何在iOS中获取应用内购买的区域设置货币价格?

时间:2013-01-22 07:54:30

标签: iphone ios objective-c in-app-purchase

我想找出用户的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显示价格,我也想显示。所以我想将国家代码发送到我的服务器,我的服务器响应该国家相关的价格表和货币符号..

9 个答案:

答案 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)

一行代码:

productSKProduct对象实例:

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国家/地区,为您的应用响应正确的本地价格。如何更改:

  

https://apple.stackexchange.com/a/89186/283550

我已经对行为进行了测试,将国家从香港更改为台湾后,这是正确的,我可以看到第1层的价格从8港币更改为30港币。 (港元为新台币)

答案 8 :(得分:-4)

create macro first then use it
#define CURRENCY_SYMBOL [[NSLocale currentLocale] objectForKey:NSLocaleCurrencySymbol]

NSLog(@"%@ %.2f",CURRENCY_SYMBOL,25.50);