Как обнаружить активный магазин iTunes на iPhone/iPod Touch/iPad?
Я хотел бы иметь возможность определить, к какому хранилищу подключается пользователь из моего приложения, чтобы я мог направить их на какой-то подходящий контент для своего устройства И хранить. Кто-нибудь знает, как получить эту информацию?
В принципе, если пользователь находится в Великобритании и подключается к британскому магазину, я хочу, чтобы моя функция/метод вернула GB, если в Корее я хочу KR, Australia = AU и т.д. Любая помощь будет оценена.
Ответы
Ответ 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 и т.д.
Разбирайте правильные коды, которые вы поддерживаете и направляете соответственно.