获取当前的iTunesStore国家/地区

时间:2013-01-24 13:19:02

标签: iphone ios objective-c

我需要获取当前激活的iTunes商店国家/地区代码。我已阅读有关获取当前区域设置的信息,但这不是一个非常智能的解决方案,因为用户可以拥有一个区域设置但完全不同的iTunes帐户。解决方案不需要合法,苹果拒绝在这里不是问题。有没有人使用私有框架找到了这种情况的解决方案?

3 个答案:

答案 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上测试过这个。

请注意,在“设置”→“存储”中退出帐户后,它甚至可以正常工作。