30

我想找出用户的 App Store 位置。这意味着它们在美国、澳大利亚 (AUD) 商店。使用以下代码。

- (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);
    }
}

如果书籍等级是一个,我希望同样明智,即基于应用商店价格矩阵表的 0.99 美元 0.99 日元 85 美元。

我在模拟器中测试过。我在系统中的 iTunes、appstore 和 safari 应用程序中更改了国家名称。但我只得到美国国家代码。

编辑:设置->常规->国际->区域格式->国家

我在设备中测试:设备国家只改变了。store country 显示美国国家代码和价格。我想在开始应用内购买时间之前存储国家代码。

多少天一次根据货币波动改变价格?它是否为已知/更新的波动价格提供任何 api/查询?

我的 inapp 操作上了一节课。在进行 inapp 操作之前,我想向用户显示本地价格,相同的价格效果反映在 inapp 操作中。

我显示免费书籍和付费书籍的列表,这是从我的服务器获取的列表。因为我显示了每件商品的价格。这些项目价格在处理应用商店时将显示美元价格。如果 appstore 显示价格,我也想显示。所以我想将国家代码发送到我的服务器,我的服务器响应该国家相关的价目表和货币符号..

4

9 回答 9

32
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);
    
}

根据您的兴趣提供区域设置和国家/地区详细信息。

于 2013-01-31T09:01:19.997 回答
28

这本书是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);

只需询问是否有任何不清楚的地方!

问候,

于 2013-01-25T10:11:46.577 回答
10

一行代码:

productSKProduct对象实例:

NSString *price = [NSString stringWithFormat:@"%@%@ %@", [product.priceLocale objectForKey:NSLocaleCurrencySymbol], product.price, [product.priceLocale objectForKey:NSLocaleCurrencyCode]];

结果:

1.39 美元

于 2016-05-20T13:41:50.060 回答
8

在斯威夫特 3 中:

    let numberFormatter = NumberFormatter()
    numberFormatter.formatterBehavior = .behavior10_4
    numberFormatter.numberStyle = .currency
    numberFormatter.locale = product.priceLocale
    let formattedPrice = numberFormatter.string(from: product.price)
于 2016-09-18T21:07:18.090 回答
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

这可以在用户点击开始购买东西之前完成。

于 2013-01-30T10:53:04.003 回答
5

你可以去了解更多关于 locale 对象,我认为你也可以使用 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

希望它会帮助你

于 2013-01-30T10:07:38.227 回答
3

在 productsResponse 中的设备上,您会收到 AppStore 帐户的正确 product.price 和 product.priceLocale,您当前已登录。因此,如果您使用此语言环境来格式化收到的价格,您将获得像“0.99$”、“33,0 руб”这样的字符串。” 等等。

于 2013-01-22T08:31:16.310 回答
-1

使用https://github.com/bizz84/SwiftyStoreKit,有

SKProduct 中的本地化价格

直接使用这个成员变量就可以了,不需要任何代码转换!!

App Store 将根据当前用户的 App Store 国家/地区向您的应用程序响应正确的本地价格。如何改变:

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

我已经测试了行为,在我将国家从香港更改为台湾后是正确的,我可以看到Tier 1的价格从HK $ 8变为$ 30。(港币兑新台币)

于 2018-09-20T05:36:24.837 回答
-4
create macro first then use it
#define CURRENCY_SYMBOL [[NSLocale currentLocale] objectForKey:NSLocaleCurrencySymbol]

NSLog(@"%@ %.2f",CURRENCY_SYMBOL,25.50);
于 2014-02-06T10:16:07.130 回答