web-dev-qa-db-ja.com

iOSでアプリ内購入のロケール通貨価格を取得するにはどうすればよいですか?

ユーザーの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);
    }
}

書籍の階層が1つの場合、App Storeの価格マトリックステーブルに基づいて、US $ 0.99 AUD 0.99 JPY 85であれば、私は賢明に欲しいです。

シミュレータでテストしました。 iTunes、appstore、システムのSafariアプリケーションで国名を変更しました。しかし、私は米国の国コードのみを取得します。

編集:設定->一般->国際->地域フォーマット->国

デバイスでテストしました:デバイスの国のみが変更されました。店舗の国は米国の国コードと価格を示します。アプリの購入時間を開始する前に国コードを保存したい。

通貨の変動に基づいて価格が変更される日数は?変動する価格のAPI /クエリを既知/更新に提供していますか?

アプリ内操作で1つのクラスが作成されました。アプリ内操作を行う前に、ユーザーにローカル価格を表示したいと思います。同じ価格効果がアプリ内操作に反映されます。

私のサーバーから取得したリストの無料の書籍と有料の書籍のリストを表示します。その中で私は各アイテムの価格を表示します。 appstoreの処理中にこれらのアイテムの価格には、ドルの価格が表示されます。 appstoreが価格を表示した場合、私も表示したいと思います。サーバーから国コードをサーバーに送信したいので、サーバーはその国に関連する価格リストと通貨記号に応答します。

27
Senthilkumar
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);
    
}

興味に応じてロケールと国の詳細を提供します。

31
Andro Selva

ここの本は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);

不明な点がないか尋ねてください!

よろしく、

28
Asif Mujteba

1行のコード:

productSKProductオブジェクトインスタンスです:

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

結果:

$ 1.39 USD

10
mskw

私はこれを使います:

  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

これは、ユーザーがアイテムの購入を開始する前に行うことができます。

6
Nikita P

ロケールオブジェクトについて詳しく知ることができます。また、以下に示すように、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
Kirtikumar A.

Swift 3:

    let numberFormatter = NumberFormatter()
    numberFormatter.formatterBehavior = .behavior10_4
    numberFormatter.numberStyle = .currency
    numberFormatter.locale = product.priceLocale
    let formattedPrice = numberFormatter.string(from: product.price)
5
brnunes

ProductsResponseのデバイスでAppStoreアカウントの正しいproduct.priceおよびproduct.priceLocaleを受信すると、現在ログインしています。したがって、このロケールを使用して受信価格のフォーマットを設定すると、「0.99 $」、「33,0руб 」等々。

3
pcholberg

https://github.com/bizz84/SwiftyStoreKit を使用してください。

sKProductのlocalizedPrice

このメンバー変数を直接使用することは問題ありません、コード変換はありませんIS必要です!!

App Storeは、現在のユーザーのApp Storeの国/地域に基づいて、アプリの正しい現地価格を応答します。変更する方法:

https://Apple.stackexchange.com/a/89186/28355

私は動作をテストしましたが、国を香港から台湾に変更した後は正しいです。Tier1の価格がHK $ 8から$ 30に変更されたことがわかります。 (香港ドルから台湾ドル)

0
Amos