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 数组。它遍历数组并仅显示与priceLocale
tableview 匹配的产品:
[[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。
我发现与此相关的唯一一件事是对此答案的评论,询问“房屋定价”是如何设置的,但没有人回应。