我希望能够确定用户从我的应用程序中连接到哪个商店,以便我可以将它们引导到他们的设备和商店的某些适当内容。有谁知道如何获取这些信息?
基本上,如果用户在英国,并连接到英国商店,我希望我的功能/方法返回GB,如果在韩国,我想要KR,澳大利亚= AU等。任何帮助将不胜感激。< / p>
答案 0 :(得分:33)
获取用户区域设置的国家/地区代码的方法将起作用...但仅当用户的iTunes商店与其区域设置相同时。情况并非总是如此。
如果您创建应用内购买项目,即使它与设备区域设置不同,您也可以使用Apple的StoreKit API查找用户的实际iTunes国家/地区。这里有一些对我有用的代码:
- (void) requestProductData
{
SKProductsRequest *request= [[SKProductsRequest alloc] initWithProductIdentifiers:
[NSSet setWithObject: PRODUCT_ID]];
request.delegate = self;
[request start];
}
- (void) productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
NSArray *myProducts = response.products;
for (SKProduct* product in myProducts) {
NSLocale* storeLocale = product.priceLocale;
storeCountry = (NSString*)CFLocaleGetValue((CFLocaleRef)storeLocale, kCFLocaleCountryCode);
NSLog(@"Store Country = %@", storeCountry);
}
[request release];
// If product request didn't work, fallback to user's device locale
if (storeCountry == nil) {
CFLocaleRef userLocaleRef = CFLocaleCopyCurrent();
storeCountry = (NSString*)CFLocaleGetValue(userLocaleRef, kCFLocaleCountryCode);
}
// Now we're ready to start creating URLs for the itunes store
[super start];
}
答案 1 :(得分:1)
到目前为止,您可以使用两种方法各取其长:
StoreFront
-> SDK> = 13
->表示与App Store店面关联的国家/地区的三个字母代码
if let storeFront = SKPaymentQueue.default().storefront{
print("StoreFront CountryCode = ", storeFront.countryCode)
}
else {
print("StoreFront NOT Available")
}
OR
SKCloudServiceController
->可从iOS 9.3获得。
->需要权限。在tvOS上,它变得混乱,因为我找不到更改设置权限的方法...
->权限文本令人困惑。
let skCloudServiceController = SKCloudServiceController()
SKCloudServiceController.requestAuthorization { (status) in
guard status == .authorized else {
return
}
skCloudServiceController.requestStorefrontCountryCode(completionHandler: { (countryCode, error) in
if let error = error {
print("Failure: ", error)
}
else if let countryCode = countryCode {
print("Country code: ", countryCode)
}
})
}
别忘了将其包含在您的.plist文件中:
<key>NSAppleMusicUsageDescription</key>
<string>Store information</string>
答案 2 :(得分:0)
获得此功能的一个难点是为每个应用商店国家/地区设置一个应用。每个应用程序都拥有自己的国家商店信息。这假设用户坚持使用一家商店,这对大多数人来说都是如此。
答案 3 :(得分:0)
我建议你试试iTunes deep links。例如,http://itunes.com/apps/appname应该将用户带到她花钱的本地App Store。
答案 4 :(得分:0)
我需要相同的功能。目前我正在考虑使用NSLocale中的数据作为默认值,但在settings.app中添加一个设置,以便用户在不匹配的情况下进行自定义。
此功能取自an answer to another question of mine。
- (NSString *)getUserCountry
{
NSLocale *locale = [NSLocale currentLocale];
return [locale objectForKey: NSLocaleCountryCode];
}
答案 5 :(得分:0)
自iOS 13.0起,Apple引入了SKStorefront API。
它允许您检查用户连接到的当前AppStore国家。
SKStorefront :一个对象,其中包含Apple App Store店面的位置和唯一标识符。
概述
通过应用商店连接创建的应用内商品可通过应用商店在每个地区销售。您可以使用店面信息来确定客户所在的地区,并提供适合该地区的应用内商品。您必须维护自己的产品标识符列表以及要在其中使用它们的店面。
主题
- 国家/地区代码:三个字母的代码,代表与App Store店面关联的国家/地区。
- 标识符:Apple定义的值,用于唯一标识App Store店面。
https://developer.apple.com/documentation/storekit/skstorefront
答案 6 :(得分:-4)
您应该使用
[[userDefaults dictionaryRepresentation] objectForKey:@"NSLocaleCode"];
这将返回类似en_US或en_UK或en_AU甚至zh_CN,zh_MY,jp_JP等语言代码。
解析您支持的正确代码并相应地指导它们。