web-dev-qa-db-fra.com

Comment accéder au prix d'un produit en skpayment?

J'ai un achat intégré pour une application iPhone.

Je veux afficher le prix dans la devise locale des utilisateurs dans un Uilabel. Pour cela, j'ai besoin du prix et de la monnaie dans une variable.

Comment puis-je obtenir le prix, y compris la devise à l'aide de la SKPAYment? (Si le skfayment est correct pour cette utilisation.)

Je suis instanciant du produit en utilisant:

SKPayment *payment = [SKPayment paymentWithProductIdentifier:@"Identifier"];

Merci à l'avance pour vos commentaires!

40
favo

Il y a un problème avec juste en utilisant nslocalecurencysymbol + prix.stringvalue: il ne gère pas les particularités de différents locaux, par exemple. s'ils mettent le symbole monétaire devant ou non. La Norvège, le Danemark, la Suède et la Suisse ont tous mis leur monnaie après, par exemple. 17.00KR. Aussi, la plupart (?) Les pays européens utilisent "," au lieu de "." Pour les décimales, par exemple. "2,99 €" plutôt que "2,99 €".

Un meilleur plan est d'utiliser Nsnumberformater. Le "Pricelocale" que le Skroproduct est retourné, comme édité de démontrage, est la clé. Il donne à Nsnumberformatter les smarts de formater un prix correctement.

Vous pouvez également rendre cela beaucoup plus facile en ajoutant une nouvelle propriété à Skroproduct à l'aide d'une catégorie Objective-C. Ajoutez les deux fichiers suivants à votre projet:


Skroproduct + Priceasstring.h:

#import <Foundation/Foundation.h>
#import <StoreKit/StoreKit.h>

@interface SKProduct (priceAsString)
@property (nonatomic, readonly) NSString *priceAsString;
@end

Skroproduct + Priceasstring.M:

#import "SKProduct+priceAsString.h"

@implementation SKProduct (priceAsString)

- (NSString *) priceAsString
{
  NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
  [formatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
  [formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
  [formatter setLocale:[self priceLocale]];

  NSString *str = [formatter stringFromNumber:[self price]];
  [formatter release];
  return str;
}

@end

Puis, #import "SKProduct+priceAsString.h" Dans votre code et vous devriez simplement être capable d'utiliser product.priceAsString dans du code.

119
gid

Le moyen correct de déterminer l'une de ces informations est d'utiliser un objet SKProduct, extrait de l'objet SKProductResponse renvoyé au délégué après un appel à - (void) start sur une SKProductsRequest. Quelque chose comme ça:

SKProductsRequest *req = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObject:@"Identifier"]];
req.delegate = self;
[req start];

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse: (SKProductsResponse *)response {
    [request autorelease];
    if (response.products.count) {
        SKProduct *product = [response.products objectAtIndex:0];
        NSLocale *priceLocale = product.priceLocale;
        NSDecimalNumber *price = product.price;
        NSString *description = product.localizedDescription;
    }
}
9
Ed Marty

Voici le Swift version de la réponse ci-dessus à l'aide d'un extension:

extension SKProduct {

    func priceAsString() -> String {

        let formatter = NSNumberFormatter()
        formatter.formatterBehavior = .Behavior10_4
        formatter.numberStyle = .CurrencyStyle
        formatter.locale = self.priceLocale
        return formatter.stringFromNumber(self.price)! as String
    }
}
2
rebello95

Voici la solution pour Swift 3.0

extension SKProduct {
  func priceAsString() -> String {
    let formatter = NumberFormatter()
    formatter.formatterBehavior = .behavior10_4
    formatter.numberStyle = .currency
    formatter.locale = self.priceLocale
    return formatter.string(from: self.price)! as String
  }
}
2
Reza Shirazian
  • Fonctionne dans Swift et objectif-c
  • Force Dalkapping est jamais votre ami.
  • L'utilisation de propriétés calculées crée un code de nettoyage pour le scénario de l'objectif-C, car il n'a pas besoin de [];)

    @OBJC Extension publique Skroproduct {

    var priceAsString: String? {
    
        let formatter = NumberFormatter()
        formatter.formatterBehavior = .behavior10_4
        formatter.numberStyle = .currency
        formatter.locale = self.priceLocale
        formatter.string(from: self.price)
    
        return formatter.string(from: self.price)
    }
    

    }

Remarque: N'oubliez pas import StoreKit

0
Darkwonder