Как получить доступ к цене продукта в SKPayment?

У меня есть In-App-Purchase для приложения для iPhone.

Я хочу отобразить цену в пользовательской местной валюте в UILabel. Для этого мне нужны цена и валюта в переменной.

Как я могу получить цену включая валюту с помощью SKPayment? (Если SKPayment корректен для этого использования.)

Я инстанцирую использования продукта:

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

Спасибо всем заранее за Вашу обратную связь!

40
задан favo 24 May 2010 в 01:33
поделиться

2 ответа

Возникла проблема с простым использованием 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 в коде.

119
ответ дан 27 November 2019 в 01:06
поделиться

Правильный способ определить любую из этой информации - использовать объект 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;
    }
}
9
ответ дан 27 November 2019 в 01:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: