1

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

4

3 回答 3

3

您可以在请求商店的产品后通过检查产品的 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
}
于 2013-01-24T14:27:41.547 回答
0

您可以使用此代码获取店面 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 上测试过这个。

请注意,它甚至在您在“设置”→“商店”中退出帐户后也可以使用。

于 2013-02-04T00:59:56.823 回答
0

你可以“CFLocaleGetValue”调用这个使用
NSString *aCountry=[getCurrentItunesStoreCountryFromProudct:myProudct];

-(NSString *)getCurrentItunesStoreCountryFromProudct:(SKProduct *)aProudct
{
 NSLocale* storeLocale = aProudct.priceLocale;
 NSString *storeCountry = (NSString*)CFLocaleGetValue((CFLocaleRef)storeLocale,   kCFLocaleCountryCode);
return storeCountry;
}
于 2013-01-29T20:49:22.403 回答