Ios 如果用户未登录iTunes,是否可以为SKProducts设置默认priceLocale?
如果用户未登录iTunes帐户,SKProducts的默认Ios 如果用户未登录iTunes,是否可以为SKProducts设置默认priceLocale?,ios,objective-c,in-app-purchase,locale,app-store-connect,Ios,Objective C,In App Purchase,Locale,App Store Connect,如果用户未登录iTunes帐户,SKProducts的默认priceLocale是如何设置的? 是否基于我设置应用内购买产品的iTunes Connect帐户?当用户未登录设备上的iTunes帐户时,是否有任何方法可以更改默认的priceLocale?还是我无法控制 我正在开发一个应用程序,它使用应用程序内购买来根据用户的位置向用户显示不同的产品。我这样做的方式是使用SKProductsRequestDelegate方法获取所有产品的数组,并将其传递给完成处理程序块: - (void)produ
priceLocale
是如何设置的?
是否基于我设置应用内购买产品的iTunes Connect帐户?当用户未登录设备上的iTunes帐户时,是否有任何方法可以更改默认的priceLocale
?还是我无法控制
我正在开发一个应用程序,它使用应用程序内购买来根据用户的位置向用户显示不同的产品。我这样做的方式是使用SKProductsRequestDelegate
方法获取所有产品的数组,并将其传递给完成处理程序块:
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
NSArray * skProducts = response.products;
...
_completionHandler(YES, skProducts);
_completionHandler = nil;
}
完成处理程序接受BOOL(success)和products数组。它遍历数组,并在表视图中仅显示与priceLocale
匹配的产品:
[[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。客户端要求默认值为US(如果未登录iTunes,或者如果用户的国家/地区不在预定列表中)
我尝试设置设备区域设置(Settings>General>International>Region Format),但这对默认存储区域设置没有影响
模拟器中显示的产品(登录iTunes帐户之前):
尝试使用CN iTunes Connect测试帐户购买年度订阅:
// NSLog output:
// productIdentifier: annual_subscription_cn
// priceLocale (iTunes Connect): CN
// currentLocale (Device): US
- 购买失败,出现错误(如预期),并显示警报
- 点击OK以重新加载产品列表
- 现在产品的priceLocale是CN,我可以向用户显示正确的产品列表
// NSLog output:
// productIdentifier: annual_subscription_cn
// priceLocale (iTunes Connect): CN
// currentLocale (Device): US
显然,设备区域设置对默认的priceLocale
没有影响。即使设备区域设置为US,默认的priceLocale
仍然是AU
我发现唯一与此相关的是一条关于如何设置“家庭定价”的评论,但没有人回应。尝试更改您的iTunes帐户连接的商店,然后注销(或使用美国帐户登录,然后注销)。它可能是上次登录时保留的。@Wain我想你可能是对的。在设备上进行测试时,似乎保留了上次登录时的国家/地区。虽然在模拟器中测试时,它始终默认为AU,因为您无法登录模拟器中的iTunes帐户(在设置中)。AU是设置的,因为您设置的testaccount可能是AU…应用程序内购买的默认货币是您设置测试帐户的国家货币。