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