У меня есть In-App-Purchase для приложения для iPhone.
Я хочу отобразить цену в пользовательской местной валюте в UILabel. Для этого мне нужны цена и валюта в переменной.
Как я могу получить цену включая валюту с помощью SKPayment? (Если SKPayment корректен для этого использования.)
Я инстанцирую использования продукта:
SKPayment *payment = [SKPayment paymentWithProductIdentifier:@"Identifier"];
Спасибо всем заранее за Вашу обратную связь!
Возникла проблема с простым использованием NSLocaleCurrencySymbol + price.stringValue: он не обрабатывает особенности различных локалей, например. помещают ли они символ валюты впереди или нет. Норвегия, Дания, Швеция и Швейцария помещают свои валюты после, например. 17.00кр. Кроме того, большинство (?) Европейских стран используют ',' вместо '.' для десятичных знаков, например. «2,99 евро», а не «2,99 евро».
Лучше использовать NSNumberFormatter. «PriceLocale», возвращаемое SKProduct, как продемонстрировал Эд, является ключевым. Это дает NSNumberFormatter умение правильно форматировать цену.
Вы также можете сделать это намного проще, добавив новое свойство в SKProduct, используя категорию Objective-C. Добавьте в свой проект следующие два файла:
SKProduct + priceAsString.h:
#import
#import @interface SKProduct (priceAsString) @property (неатомный, только для чтения) NSString * priceAsString; @конец
SKProduct + priceAsString.m:
#import "SKProduct + priceAsString.h" @ реализация SKProduct (priceAsString) - (NSString *) priceAsString { NSNumberFormatter * formatter = [[NSNumberFormatter alloc] инициализация]; [форматировщик setFormatterBehavior: NSNumberFormatterBehavior10_4]; [форматировщик setNumberStyle: NSNumberFormatterCurrencyStyle]; [форматирование setLocale: [собственная ценаLocale]]; NSString * str = [форматирующая строкаFromNumber: [собственная цена]]; [выпуск форматтера]; return str; } @конец
Затем #import "SKProduct + priceAsString.h"
в коде, и вы должны просто иметь возможность использовать product.priceAsString
в коде.
Правильный способ определить любую из этой информации - использовать объект SKProduct
, полученный из объекта SKProductResponse
, возвращенного делегату после вызова to - (void) start
на инициализированном SKProductsRequest
. Примерно так:
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;
}
}