web-dev-qa-db-fra.com

Comment obtenir le prix en devise locale pour les achats intégrés dans iOS?

Je souhaite connaître l'emplacement de l'App Store de l'utilisateur. Cela signifie qu'ils sont aux États-Unis et en Australie (AUD). Code suivant utilisé.

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

Je veux comme sage si le niveau de livre est égal à un, cela signifie US $ 0,99 AUD 0,99 JPY 85 basé sur le tableau de matrice de prix de l'App Store.

J'ai testé dans le simulateur. J'ai changé le nom du pays dans iTunes, Appstore et Safari dans le système. mais je n'obtiens que le code de pays américain.

Édition: Paramètres-> Général-> International-> Format de région-> pays

J'ai testé dans l'appareil: seul le pays de l'appareil a été modifié. pays du magasin montrent le code et le prix du pays américain. Je veux enregistrer le code de pays avant de commencer le temps d’achat inapp.

combien de jours une fois le prix modifié en fonction de la fluctuation des devises? fournit-il une requête ou une requête de fluctuation de prix à connaître/mettre à jour?

mon opération inapp fait une classe. Avant l'opération inapp faite je veux afficher le prix local à l'utilisateur même effet de prix reflète dans l'opération inapp.

j'affiche la liste des livres gratuits et payants, c'est la liste obtenue de mon serveur. en ce que j'affiche le prix pour chaque article. le prix des articles lors du traitement de l’appstore, il indiquera le prix en dollars. si appstore a montré le prix ainsi que je veux montrer. de sorte que je veux envoyer le code du pays à mon serveur à partir de ce que mon serveur répond à la liste de prix et au symbole monétaire de ce pays .. 

26
Senthilkumar
productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:prodcutIdentifier];
    productsRequest.delegate = self;
    
    // This will trigger the SKProductsRequestDelegate callbacks
    [productsRequest start];

Cela appellera votre fonction de délégué. Une fois que ce qui précède est fait, il appellera automatiquement la fonction mentionnée ci-dessous enfin. C’est ici que la demande d’app store envoyée sera finalisée. 

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

fournissez les détails de la région et du pays selon votre intérêt. 

31
Andro Selva

Ici, le livre est le 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);

il suffit de demander si quelque chose n'est pas clair!

Cordialement,

26
Asif Mujteba

Une ligne de code:

product est l'instance d'objet SKProduct:

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

Résultats:

1,39 USD

10
mskw

j'utilise ceci:

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

en méthode déléguée: 

 - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response

cela peut être fait avant que l'utilisateur clique pour commencer à acheter des choses.

6
Nikita P

Vous pouvez aller pour en savoir plus sur les objets de paramètres régionaux, également Je pense que vous pouvez également utiliser les paramètres régionaux de devise par NSLocale, comme indiqué ci-dessous

 NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[formatter setLocale:[NSLocale currentLocale];
NSString *localizedMoneyString = [formatter stringFromNumber:myCurrencyNSNumberObject];

et vous obtiendrez la chaîne de devise formatée correcte comme celle-ci,

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];

et j'ai aussi essayé celui-ci dans mon application

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

J'espère que cela vous aidera

5
Kirtikumar A.

Dans Swift 3:

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

Sur le périphérique dans productsResponse, vous recevez les produits product.price et product.priceLocale for AppStore corrects, vous êtes actuellement connecté. Ainsi, si vous utilisez ces paramètres régionaux pour le formatage du prix reçu, vous obtiendrez des chaînes telles que "0.99 $", "33,0 GBP . " etc.

3
pcholberg

Utilisez https://github.com/bizz84/SwiftyStoreKit , il y a

prix localisé dans SKProduct

Utilisez directement cette variable de membre est OK, NO AUCUNE CONVERSION DE CODE IS NÉCESSAIRE !!

App Store répondra le prix local correct à votre application, en fonction du pays/de la région de l'App Store de l'utilisateur actuel. Comment changer:

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

J'ai testé le comportement, c'est correct après avoir changé le pays de Hong Kong à Taiwan, je peux voir que le prix du niveau 1 est passé de 8 HK $ à 30 $. (Dollar de Hong Kong en Dollar de Taiwan)

0
Amos