如何检测iPhone / iPod Touch / iPad上的活动iTunes商店?

时间:2010-03-29 19:04:02

标签: iphone objective-c itunes itunes-store

我希望能够确定用户从我的应用程序中连接到哪个商店,以便我可以将它们引导到他们的设备和商店的某些适当内容。有谁知道如何获取这些信息?

基本上,如果用户在英国,并连接到英国商店,我希望我的功能/方法返回GB,如果在韩国,我想要KR,澳大利亚= AU等。任何帮助将不胜感激。< / p>

7 个答案:

答案 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等语言代码。

解析您支持的正确代码并相应地指导它们。

相关问题