【问题标题】:Display IAP Price When Device Cannot Retrieve SKProduct Price设备无法检索 SKProduct 价格时显示 IAP 价格
【发布时间】:2014-11-18 12:27:15
【问题描述】:

我有一个应用内购买项目,费用为 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

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

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

【问题讨论】:

  • 不要假设您的 IAP 将始终为 1.99。你可能会改变主意,或者苹果有一天会改变价格。正如“remus”在他们的回答中所问的那样,为什么要这样做?如果应用无法访问 Internet,则不应向用户显示任何有关 IAP 的信息,因为如果没有 Internet 访问权限,您将无法执行任何 IAP。

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


【解决方案1】:

您可以创建一个属性列表 (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];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多