23

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

基本上,如果用户在英国并连接到英国商店,我希望我的函数/方法返回 GB,如果在韩国,我希望 KR、Australia = AU 等。任何帮助将不胜感激。

4

7 回答 7

34

获取用户区域设置的国家代码的方法将起作用……但前提是用户的 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];
}
于 2012-03-08T22:16:54.733 回答
3

从 iOS 13.0 开始,Apple 引入了SKStorefront API。

它允许您检查用户连接到的当前 AppStore 国家/地区。

SKStorefront:包含 Apple App Store 店面的位置和唯一标识符的对象。

概述

您通过 App Store Connect 创建的应用内产品可在每个拥有 App Store 的地区销售。您可以使用店面信息来确定客户所在的地区,并提供适合该地区的应用内商品。您必须维护自己的产品标识符列表以及要在其中提供它们的店面。

话题

  • countryCode:代表与 App Store 店面关联的国家/地区的三字母代码。
  • identifier:由 Apple 定义的唯一标识 App Store 店面的值。

https://developer.apple.com/documentation/storekit/skstorefront

于 2019-09-29T11:36:14.797 回答
2

到目前为止,您可以使用 2 种方法,各有优缺点:

店面

->SDK >= 13

->代表与 App Store 店面关联的国家/地区的三字母代码

if let storeFront = SKPaymentQueue.default().storefront{
    print("StoreFront CountryCode = ", storeFront.countryCode)
}
else {
    print("StoreFront NOT Available")
}

或者

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>
于 2020-06-08T14:38:13.517 回答
0

获得此功能的一个困难方法是为每个应用商店国家/地区设置一个应用程序。每个应用程序都拥有自己的国家/地区商店信息。这假设用户坚持一家商店,这对大多数人来说应该是正确的。

于 2010-03-29T19:32:52.577 回答
0

我建议你试试 iTunes深层链接。例如, http: //itunes.com/apps/appname应该将用户带到她花钱的本地 App Store。

于 2010-04-12T09:19:59.157 回答
0

我需要相同的功能。目前我正在考虑使用来自 NSLocale 的数据作为默认读取,但在 settings.app 中添加一个设置,以便用户在不匹配时对其进行自定义。

此功能取自对我的另一个问题的回答

- (NSString *)getUserCountry
{
    NSLocale *locale = [NSLocale currentLocale];
    return [locale objectForKey: NSLocaleCountryCode];
}
于 2010-04-14T16:51:58.890 回答
-4

你可能应该使用

[[userDefaults dictionaryRepresentation] objectForKey:@"NSLocaleCode"];

这将返回一个语言代码,如 en_US 或 en_UK 或 en_AU 甚至 zh_CN、zh_MY、jp_JP 等。

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

于 2010-04-05T17:09:33.197 回答