2

SKProducts的默认设置是如何priceLocale设置的(如果用户未登录 iTunes 帐户)? 它是否基于我设置应用内购买产品的 iTunes Connect 帐户?priceLocale当用户未登录设备上的 iTunes 帐户时,有什么方法可以更改默认设置?还是我无法控制?

我正在开发一个应用程序,该应用程序使用应用内购买根据用户的位置向用户显示不同的产品。我这样做的方式是使用SKProductsRequestDelegate方法获取所有产品的数组并将其传递给完成处理程序块:

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
    NSArray * skProducts = response.products;
    ...
    _completionHandler(YES, skProducts);
    _completionHandler = nil;
}

完成处理程序采用 BOOL(成功)和 products 数组。它遍历数组并仅显示与priceLocaletableview 匹配的产品:

[[AnnualSubscriptionIAPHelper sharedInstance] requestProductsWithCompletionHandler:^(BOOL success, NSArray *products) {
    if (success)
    {
        NSMutableArray * productsForCountry = [[NSMutableArray alloc] init];
        for (SKProduct * product in products)
        {
            NSLocale * storeLocale = product.priceLocale;
            NSString * storeCountry = (NSString*)CFLocaleGetValue((CFLocaleRef)storeLocale, kCFLocaleCountryCode);

            // Country code for the product is the last 2 characters in the productIdentifier string
            // E.g. annual_subscription_au
            NSString * productCountry = [[product.productIdentifier substringFromIndex:product.productIdentifier.length - 2] uppercaseString];

            if ([productCountry isEqualToString:storeCountry])
                [productsForCountry addObject:product];
        }

        _products = productsForCountry;
        [self.tableView reloadData];
    }
    [self.refreshControl endRefreshing];
}];

当用户登录到 iTunes 帐户时,这可以正常工作。但是,如果用户未登录 iTunes,则priceLocale所有产品的默认值为AU。客户端要求默认为美国(如果未登录 iTunes,或者如果用户的国家不在预定列表中)。

我尝试设置设备区域设置(Settings > General > International > Region Format)但这对默认商店区域设置没有影响。

模拟器中显示的产品(在登录 iTunes 帐户之前):

// NSLog output:
// productIdentifier: annual_subscription_au 
// priceLocale (iTunes Connect): AU 
// currentLocale (Device): US

尝试使用 CN iTunes Connect 测试帐户购买 yearn_subscription_au:

  • 购买失败并出现错误(如预期)并显示警报
  • 点击确定以重新加载产品列表
  • 现在产品的 priceLocale 是 CN,我可以向用户显示正确的产品列表

使用中文(CN)测试账号登录后输出:

// NSLog output:
// productIdentifier: annual_subscription_cn
// priceLocale (iTunes Connect): CN 
// currentLocale (Device): US

显然,设备语言环境对默认值没有影响priceLocale。即使设备区域设置为 US,默认priceLocale值仍然是 AU。

我发现与此相关的唯一一件事是对此答案的评论,询问“房屋定价”是如何设置的,但没有人回应。

4

0 回答 0