Подтвердить что ты не робот

Как обнаружить активный магазин iTunes на iPhone/iPod Touch/iPad?

Я хотел бы иметь возможность определить, к какому хранилищу подключается пользователь из моего приложения, чтобы я мог направить их на какой-то подходящий контент для своего устройства И хранить. Кто-нибудь знает, как получить эту информацию?

В принципе, если пользователь находится в Великобритании и подключается к британскому магазину, я хочу, чтобы моя функция/метод вернула GB, если в Корее я хочу KR, Australia = AU и т.д. Любая помощь будет оценена.

4b9b3361

Ответ 1

Подход к получению кода страны локали пользователя будет работать... но только в том случае, если пользовательский магазин iTunes совпадает с их локалью. Это не всегда так.

Если вы создаете элемент покупки в приложении, вы можете использовать API Apple StoreKit, чтобы узнать реальную страну-пользователя 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 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];
}

Ответ 2

Трудный способ получить эту функцию - настроить одно приложение для каждой страны магазина приложений. Каждое приложение хранит информацию о своей стране. Это предполагает, что пользователь придерживается одного хранилища, что должно быть правдой для большинства людей.

Ответ 3

Я предлагаю вам попробовать iTunes глубокие ссылки. Например, http://itunes.com/apps/appname следует забрать пользователя в локальный магазин приложений, где она тратит деньги.

Ответ 4

Мне нужна такая же функциональность. На данный момент я рассматриваю возможность чтения данных из NSLocale по умолчанию, но добавляю параметр в settings.app для пользователя, чтобы настроить его, если он не соответствует.

Эта функция взята из ответа на другой вопрос.

- (NSString *)getUserCountry
{
    NSLocale *locale = [NSLocale currentLocale];
    return [locale objectForKey: NSLocaleCountryCode];
}

Ответ 5

Начиная с iOS 13.0, Apple представила SKStorefront API.

Позволяет проверить текущую страну AppStore, к которой подключен пользователь.

SKStorefront: объект, содержащий местоположение и уникальный идентификатор магазина Apple App Store.

Обзор

Продукты в приложении, которые вы создаете через App Store Connect, доступны для продажи в каждом регионе с помощью App Store. Вы можете использовать информацию о витрине магазина, чтобы определить регион покупателя, и предлагать внутриигровые продукты, подходящие для этого региона. Вы должны вести свой собственный список идентификаторов продуктов и витрин, в которых вы хотите сделать их доступными.

темы

  • countryCode: трехбуквенный код, представляющий страну, связанную с витриной магазина App Store.
  • идентификатор: значение, определенное Apple, однозначно идентифицирующее витрину магазина приложений.

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

Ответ 6

Вероятно, вы должны использовать

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

Это вернет код языка, например en_US или en_UK или en_AU или даже zh_CN, zh_MY, jp_JP и т.д.

Разбирайте правильные коды, которые вы поддерживаете и направляете соответственно.