设备无法检索SKProduct价格时显示IAP价格

时间:2014-11-18 02:17:58

标签: ios objective-c cocoa-touch in-app-purchase

我为我的应用购买了一个售价1.99英镑的应用内购买。我使用弹出窗口显示此价格,但是,当设备未连接到互联网时,它无法检索我的IAP的价格,因此它显示为空白。

我的IAP价格总是1.99英镑。当设备未连接到互联网时,如何为其他国家/地区显示此IAP层?

这就是我目前获得IAP价格的方式:

_products = nil;
        [[AppIAPHelper sharedInstance] requestProductsWithCompletionHandler:^(BOOL success, NSArray *products) {
            if (success) {
                _products = products;

                SKProduct * product = _products[0];

                [[AppIAPHelper sharedInstance] productPurchased:product.productIdentifier];

                NSNumberFormatter *_priceFormatter = [[NSNumberFormatter alloc] init];
                [_priceFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
                [_priceFormatter setLocale:product.priceLocale];
                priceString = [_priceFormatter stringFromNumber:product.price];

                NSLog(@"Price string: %@",priceString);
            }
        }];

我尝试测试priceString.count <= 0(因此设备未连接到互联网),然后执行:

NSDecimalNumber *amount = [NSDecimalNumber decimalNumberWithString:@"1.99"];
NSNumberFormatter *currencyFormat = [[NSNumberFormatter alloc] init];
NSLocale *locale = [NSLocale currentLocale];
[currencyFormat setNumberStyle:NSNumberFormatterCurrencyStyle];
[currencyFormat setLocale:locale];
NSLog(@"AmountSo with symbol: %@", [currencyFormat stringFromNumber:amount]);//Eg: $50.00
NSLog(@"Current Locale : %@", [locale localeIdentifier]);//Eg: en_US

但这只会将本地货币符号添加到amount

问题是,我需要显示正确的价格等级。例如,转换为GBP的1.99美元是1.27。但IAP等级分别为1.99美元和1.49英镑。

基本上 - 如何在不请求SKProduct价格的情况下(如果用户未连接到互联网)显示用户本地电流的App Store IAP价格等级?谢谢。< / p>

1 个答案:

答案 0 :(得分:2)

您可以创建属性列表(plist),静态NSDictionary或其他一些包含映射到国家/地区代码的当前价格层的关系表。如果没有可用的网络连接,请抓住the current locale country并使用它来查找价格等级和本地货币符号。

问题:既然您没有网络连接就无法进行应用内购买,为什么还要关心?只是发出一条通知,说明网络连接不可用?

如果您希望它有点健壮,可以使用另一个选项将其设置为使用在网络可用时刷新它的策略进行缓存,否则使用缓存副本。使用Reachability这样的内容会起作用,但可以肯定这是针对NSURLRequest而不是SKProduct请求。

Reachability *reachability = [Reachability reachabilityForInternetConnection];
NetworkStatus netStatus = [reachability currentReachabilityStatus];
if (netStatus == ReachableViaWiFi)
    [request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
else
    [request setCachePolicy:NSURLRequestReturnCacheDataElseLoad];