我需要获取当前激活的iTunes商店国家/地区代码。我已阅读有关获取当前区域设置的信息,但这不是一个非常智能的解决方案,因为用户可以拥有一个区域设置但完全不同的iTunes帐户。解决方案不需要合法,苹果拒绝在这里不是问题。有没有人使用私有框架找到了这种情况的解决方案?
答案 0 :(得分:2)
您可以通过在产品的priceLocale上查看NSLocale来请求商店的产品后执行此操作。试试这段代码:
- (NSString*) storeCountryCode:(NSArray*) products
{
NSString* countryCode = nil;
SKProduct* product = [products objectAtIndex:0];
if(product != nil)
{
NSLocale* storeLocale = product.priceLocale;
countryCode = (__bridge NSString*)CFLocaleGetValue((__bridge CFLocaleRef)storeLocale, kCFLocaleCountryCode);
}
return countryCode;
}
您可以从SKProductsRequestDelegate方法调用此方法:
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
NSString* storeCountryCode = [self storeCountryCode:response.products];
//other product handling
}
答案 1 :(得分:0)
你可以“CFLocaleGetValue”调用此用途
NSString *aCountry=[getCurrentItunesStoreCountryFromProudct:myProudct];
-(NSString *)getCurrentItunesStoreCountryFromProudct:(SKProduct *)aProudct
{
NSLocale* storeLocale = aProudct.priceLocale;
NSString *storeCountry = (NSString*)CFLocaleGetValue((CFLocaleRef)storeLocale, kCFLocaleCountryCode);
return storeCountry;
}
答案 2 :(得分:0)
您可以使用此代码获取Storefront ID。由于它依赖于私有API,因此不要在生产代码中使用。
NSError *error = nil;
BOOL loaded = [[NSBundle bundleWithPath:@"/System/Library/PrivateFrameworks/iTunesStore.framework"] loadAndReturnError:&error];
if (loaded) {
NSString *localStoreFrontID = nil;
@try {
localStoreFrontID = [NSClassFromString(@"ISClient") valueForKeyPath:@"currentClient.localStoreFrontID"];
}
@catch (NSException *exception) {
NSLog(@"%@", exception);
}
NSLog(@"localStoreFrontID: %@", localStoreFrontID);
}
else {
NSLog(@"Error: %@", error);
}
在iOS 5.1.1上,我为我打印了localStoreFrontID: 143459-2,2
,即瑞士商店。我不确定-2,2
后缀是什么意思,也许是关于语言的。我还没有在iOS 6上测试过这个。
请注意,在“设置”→“存储”中退出帐户后,它甚至可以正常工作。