sale proximo precio nuevo lanzamiento cuando iphone xcode in-app-purchase

iphone - proximo - ¿Cómo acceder al precio de un producto en SKPayment?



iphone xs precio (5)

Aquí está la solución para 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 } }

Estoy teniendo una compra in-app para una aplicación de iPhone.

Quiero mostrar el precio en la moneda local de los usuarios en un UILabel. Para esto necesito el precio y la moneda en una variable.

¿Cómo puedo obtener el precio incluyendo la moneda utilizando SKPayment? (Si SKPayment es correcto para este uso.)

Estoy instanciando el producto usando:

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

Gracias a todos por adelantado por sus comentarios!


Aquí está la versión Swift de la respuesta anterior con una 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 } }


Hay un problema con el simple uso de NSLocaleCurrencySymbol + price.stringValue: no maneja las peculiaridades de diferentes locales, por ejemplo. Ya sea que pongan el símbolo de moneda en frente o no. Noruega, Dinamarca, Suecia y Suiza pusieron su moneda después, por ejemplo. 17.00Kr. Además, la mayoría de (?) Países europeos usan '','' en lugar de ''.'' para decimales, por ej. "2,99 €" en lugar de "€ 2,99".

Un plan mejor es usar NSNumberFormatter. La "escala de precios" que devolvió SKProduct, como demostró Ed, es la clave. Le da a NSNumberFormatter la inteligencia para dar formato a un precio correctamente.

También puede hacer esto mucho más fácil agregando una nueva propiedad a SKProduct usando una categoría de Objective-C. Agregue los siguientes dos archivos a su proyecto:

SKProduct + priceAsString.h:

#import <Foundation/Foundation.h> #import <StoreKit/StoreKit.h> @interface SKProduct (priceAsString) @property (nonatomic, readonly) NSString *priceAsString; @end

SKProduct + 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

Luego, #import "SKProduct+priceAsString.h" en su código, y debería poder usar product.priceAsString en el código.


La forma correcta de determinar cualquiera de esa información es usar un objeto SKProduct , recuperado del objeto SKProductResponse devuelto al delegado después de que una llamada a - (void) start en un SKProductsRequest inicializado. Algo como esto:

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


  • Trabaja en Swift y Objective-C
  • La fuerza de desenvolver nunca es tu amiga.
  • El uso de propiedades computadas crea un código más limpio para el escenario de Objective-C porque no necesita [];)

    @objc public extension SKProduct {

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

    }

NOTA: No olvides import StoreKit