Я создаю бесплатную версию игры для iPhone. Я хочу, чтобы внутри бесплатной версии была кнопка, которая переводит людей к платной версии в магазине приложений. Если я использую стандартную ссылку
http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=300136119&mt=8
iPhone сначала открывает Safari, а затем магазин приложений. Я использовал другие приложения, которые напрямую открывают магазин приложений, поэтому знаю, что это возможно.
Любые идеи? Какова схема URL-адресов магазина приложений?





Просто замените itunes на phobos в ссылке на приложение.
http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=300136119&mt=8
Теперь он откроет App Store напрямую
Отредактировано 02.02.2016
Начиная с iOS 6 был введен класс SKStoreProductViewController. Вы можете связать приложение, не выходя из приложения. Фрагмент кода в Swift 3.x / 2.x и Цель-C - это здесь.
A SKStoreProductViewController object presents a store that allows the user to purchase other media from the App Store. For example, your app might display the store to allow the user to purchase another app.
От Новости и объявления для разработчиков Apple.
Drive Customers Directly to Your App on the App Store with iTunes Links With iTunes links you can provide your customers with an easy way to access your apps on the App Store directly from your website or marketing campaigns. Creating an iTunes link is simple and can be made to direct customers to either a single app, all your apps, or to a specific app with your company name specified.
To send customers to a specific application: http://itunes.com/apps/appname
To send customers to a list of apps you have on the App Store: http://itunes.com/apps/developername
To send customers to a specific app with your company name included in the URL: http://itunes.com/apps/developername/appname
Дополнительные замечания:
Вы можете заменить http:// на itms:// или itms-apps://, чтобы избежать перенаправления.
Пожалуйста, обрати внимание, что itms:// отправит пользователя в ITunes магазин и itms-apps:// с отправкой их в Магазин приложений!
Для получения информации об именах см. Apple QA1633:
https://developer.apple.com/library/content/qa/qa1633/_index.html.
Изменить (по состоянию на январь 2015 г.):
Ссылки itunes.com/apps следует обновить до appstore.com/apps. См. QA1633 выше, который был обновлен. Новый QA1629 предлагает следующие шаги и код для запуска магазина из приложения:
NSURL с скопированным URL-адресом iTunes, затем передайте этот объект методу UIApplication: openURL, чтобы открыть ваш элемент в App Store.Образец кода:
NSString *iTunesLink = @"itms://itunes.apple.com/app/apple-store/id375380948?mt=8";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];
iOS10 +:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink] options:@{} completionHandler:nil];
Swift 4.2
let urlStr = "itms-apps://itunes.apple.com/app/apple-store/id375380948?mt=8"
if #available(iOS 10.0, *) {
UIApplication.shared.open(URL(string: urlStr)!, options: [:], completionHandler: nil)
} else {
UIApplication.shared.openURL(URL(string: urlStr)!)
}
Совет: используйте itms: // вместо http: //, тогда он откроется напрямую в магазине приложений. На iPhone он сделает 2 (!) Редиректа при использовании http и 1 при использовании itms. При использовании старых ссылок phobos (см. Выше) существует 0 редиректов. Используйте идентификатор из iTunes Connect при использовании ссылок на фобос. Вы можете отправить приложение без включения двоичного файла. Таким образом, вы получите идентификатор до того, как отправите фактический двоичный файл. Я не пробовал, но слышал, что это работает.
Есть ли способ сделать такую ссылку и по-прежнему поддерживать статус партнера?
Я не уверен. Вы можете задать этот вопрос как отдельный вопрос, так как вы, вероятно, получите больше ответов.
Что делать, если имя вашего приложения содержит пробелы? Будет ли это заменено подчеркиванием в ссылке?
См .: developer.apple.com/library/ios/#qa/qa1633/_index.html (Пробелы нужно просто удалить.)
Ссылка в этом посте не работает; содержание выглядит так, как будто оно взято из фрагмента новостей, опубликованного 6 января 2010 г. У Натана С. ссылка получше.
Кроме ... какое правильное значение использовать для appname? Это "Отображаемое имя пакета" приложения? Это без учета регистра? Как обрабатываются пробелы и т. д.?
@aroth, правильное имя для appname - это имя, которое вы дали (или собираетесь сделать) в iTunesConnect при загрузке приложения в первый раз. Поэтому вы не сможете проверить ссылку до того, как приложение, наконец, появится в магазине. Чтобы преодолеть это, я использовал ссылку на домашнюю страницу моего приложения, откуда я веду через ссылку на магазин (и, конечно же, предоставил другую информацию). С первым обновлением своего приложения я напрямую связался с магазином.
Это следует проверить на реальном устройстве.
@quano Использование полного URL-адреса itunes.apple.com с http (вместо itunes.com) также напрямую открывает магазин приложений.
@AndrewHershberger Но quano говорит, что использование itms уменьшает количество перенаправлений, что делает его удобнее для пользователя.
Это ДОЛЖНО быть протестировано на реальном устройстве, да! Я боролся, чтобы ничего не происходило около часа, прежде чем подключить iPad и протестировать его там. Гех.
@bagusflyer См. ссылку на QA1633, там есть все необходимые детали по именованию.
@GMsoF, это было давно, и я не уверен, применяются ли перенаправления до сих пор. В любом случае, вы можете найти ссылку на фобос ниже. phobos.apple.com/WebObjects/MZStore.woa/wa/…. Просто измените идентификатор на идентификатор своего приложения.
Google показывает ссылку "Будет видно в ..." при загрузке в Google Play. Причина, по которой Apple не показывает эту ссылку при загрузке, в том ...? > :( Это оставлено на счет небезопасности поиска новостей, сообщений в блогах и форумах, которые могут быть старыми и недействительными. По крайней мере, Натан С. полезен, так что +1 за это!
@Imran Я полагаю, вы заменяете "developername" своим именем разработчика? См. Связанный QA1633 для получения информации о том, как получить правильное имя разработчика.
Спасибо, Натан, но я не могу его получить. Подскажите, пожалуйста, работает ли эта функция в последнем обновлении.
предположим, что мое имя разработчика - Имран, тогда я прохожу ... appstore.com/imran...So это действительный, но не работает.
@Imran Я предлагаю задать этот вопрос в отдельном вопросе, вернувшись к нему для справки.
В имени моего приложения есть пробелы. Как мне поместить название моего приложения в конец ссылки? @HermannKlecker
@WowBow См. Комментарий выше - пробелы удалены.
Допустимо ли использовать только идентификатор приложения, например itms-apps: //itunes.apple.com/app/id123456789? mt = 8 Генератор ссылок использует «название магазина приложений», которое я планирую изменить при следующем обновлении, но оно еще не установлено ...
Я рекомендую использовать путь с именем разработчика перед именем приложения; Таким образом, если имя вашего приложения изменится, пользователь все равно попадет в список приложений для разработчиков.
попробовал обновить на симуляторе, и я получаю ошибку на странице браузера "адрес недействителен"
Если вы используете itms: он не покажет вам возможность обновления, если доступно обновление. Вместо этого используйте itms-apps: // или https: //.
Для поиска по ссылке у Apple теперь намного лучше и проще интерфейс: linkmaker.itunes.apple.com
На iOS. itms открывает itunes. в то время как itms-apps открывает App Store. Это ключевое различие при запросе пользователей на обновление! (iOS 10)
Фрагменты кода в Быстрый и объективный-c
В высоко оцененном комментарии говорится, что нужно использовать itms:// ... но при этом открывается приложение iTunes, а не приложение App Store! Вместо этого используйте itms-apps://.
Обратите внимание, что любые приведенные здесь ссылки не работают в симуляторе (iOS 11 beta3), но работают на устройстве (iOS 10.3).
В настоящее время (iOS 11) для открытия страницы разработчика необходимо использовать ссылку, подобную этой: itms-apps: //itunes.apple.com/developer/johndoe/id123456789
Обратите внимание, что SKStoreProductViewController работает очень медленно на устройствах iOS 12. Иногда мне требуется более 10 секунд для загрузки страницы продукта, поэтому я бы не рекомендовал использовать этот класс на iOS 12, чтобы не потерять всех нетерпеливых пользователей. (см. форумы.developer.apple.com/thread/107618)
как открыть в App Store вместо iTunes Store? Также лучше не включать us в ссылку.
и приложение iTunes Store может быть удалено пользователем
Если вы хотите открыть приложение прямо в App Store, вам следует использовать:
itms-apps: // ...
Таким образом, он будет напрямую открывать приложение App Store на устройстве, вместо того, чтобы сначала переходить в iTunes, а затем открывать только App Store (при использовании только itms: //)
Надеюсь, это поможет.
Обновлено: АПРЕЛЬ, 2017. itms-apps: // снова работает в iOS10. Я это проверил.
Обновлено: АПРЕЛЬ, 2013. Это больше не работает в iOS5 и выше. Просто используйте
https://itunes.apple.com/app/id378458261
и перенаправлений больше нет.
Я не думаю, что это больше нужно. Я использую http в своем приложении, и он идет прямо в приложение App Store.
@PEZ На сегодняшний день я вижу два перенаправления при использовании http: // ... У меня ответ отлично работает - itms-apps: // ... напрямую открывает приложение App Store на устройстве без каких-либо перенаправлений.
Признаюсь, запросов я не отслеживал. =) Я тоже сейчас перейду на imts-apps.
кучу помогает, спасибо. fwiw, используя только "itms:" на ipad2 / ios 4, я получаю перенаправление, а с "itms-apps:" - нет.
Рокотилос, ты уверен, что это больше не работает? Вы можете разместить ссылку?
Можем ли мы открыть и показать все приложения, загруженные разработчиком, на одной странице?
Это действительно помогает. Мне нужен был этот конкретный ответ, потому что мы перешли на универсальное приложение. Нам нужно избегать ссылки на имя приложения в URL-адресе (поскольку оно меняется), указывая пользователю на то самое приложение, которое будет заменено универсальным приложением.
На iOS. itms открывает itunes. в то время как itms-apps открывает App Store. Это ключевое различие при запросе пользователей на обновление! (iOS 10)
itms действителен прямо сейчас, однако itms-apps или itms-apps недействительны. Например, сафари сообщает, что itms-apps://itunes.apple.com/us/app/apple-store/id375380948 недействителен на любом устройстве iOS 10. @mcm
itms-apps открывает для меня приложение App Store через openURL: в iOS 10.2. Кажется, нет проблем.
Начиная с версии 10.3 этот метод работает, но он должен проходить через всплывающее окно промежуточного отображения «открыть этот URL-адрес в магазине приложений»? Ссылка: blog.branch.io/…
Спасибо за это .. Работает как ссылка в play store :)
@DawnSong, дело не в Safari, а в приложении, которое вы разрабатываете
Если вы хотите разместить ссылку на приложения разработчика и в имени разработчика есть знаки препинания или пробелы (например, Development Company, LLC), сформируйте URL-адрес следующим образом:
itms-apps://itunes.com/apps/DevelopmentCompanyLLC
В противном случае он возвращает «Этот запрос не может быть обработан» на iOS 4.3.3.
Если это не сработает для вас, попробуйте следующий синтаксис: itms-apps: //itunes.com/apps/ChuckSmith/id290402113, заменив мое имя на вашу компанию и мой идентификатор на ваш идентификатор исполнителя, который вы можете получить по ссылке iTunes производитель: itunes.apple.com/linkmaker
Вы также можете попробовать закодировать эти «специальные» символы - например, заменить «.» с "% 2E"
это лучший ответ!
Это работает и напрямую связывается в ios5
NSString *iTunesLink = @"http://itunes.apple.com/app/baseball-stats-tracker-touch/id490256272?mt=8";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];
Этот код генерирует ссылку на App Store на iOS.
NSString *appName = [NSString stringWithString:[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleName"]];
NSURL *appStoreURL = [NSURL URLWithString:[NSString stringWithFormat:@"itms-apps://itunes.com/app/%@",[appName stringByReplacingOccurrencesOfString:@" " withString:@""]]];
Замените itms-apps на http на Mac:
NSURL *appStoreURL = [NSURL URLWithString:[NSString stringWithFormat:@"http:/itunes.com/app/%@",[appName stringByReplacingOccurrencesOfString:@" " withString:@""]]];
Открыть URL на iOS:
[[UIApplication sharedApplication] openURL:appStoreURL];
Mac:
[[NSWorkspace sharedWorkspace] openURL:appStoreURL];
Это работает, но вам также необходимо удалить специальные символы, такие как тире, из имени приложения.
Спасибо @ 3 revs и @BlackRider
Можем ли мы открыть и показать все приложения, загруженные разработчиком, на одной странице?
Это было единственное решение, которое сработало для меня с минимальным количеством перенаправлений и максимальной обработкой пробелов в имени приложения.
Чтобы иметь прямую ссылку без перенаправления:
http:// на itms-apps://[[UIApplication sharedApplication] openURL:url];Будьте осторожны, эти ссылки работают только на реальных устройствах, а не в симуляторе.
Источник: https://developer.apple.com/library/ios/#qa/qa2008/qa1629.html
+1 для itunes.apple.com/linkmaker, все тестируют ссылку в устройстве, а не в симуляторе, я зря тратил время на тестирование симулятора.
Спасибо за информацию о Симуляторе, добавлю в ответ
Это отлично сработало для меня, используя только APP ID:
NSString *urlString = [NSString stringWithFormat:@"http://itunes.apple.com/app/id%@",YOUR_APP_ID];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];
Количество редиректов - НОЛЬ.
Вы можете получить ссылку на определенный элемент в магазине приложений или iTunes через средство создания ссылок по адресу: http://itunes.apple.com/linkmaker/
Этот мне помог, потому что ссылка в моем itunes-connect не работала, а в генераторе работает. Спасибо
Apple только что объявила URL-адреса appstore.com.
https://developer.apple.com/library/ios/qa/qa1633/_index.html
There are three types of App Store Short Links, in two forms, one for iOS apps, another for Mac Apps:
Company Name
iOS: http://appstore.com/ for example, http://appstore.com/apple
Mac: http://appstore.com/mac/ for example, http://appstore.com/mac/apple
App Name
iOS: http://appstore.com/ for example, http://appstore.com/keynote
Mac: http://appstore.com/mac/ for example, http://appstore.com/mac/keynote
App by Company
iOS: http://appstore.com// for example, http://appstore.com/apple/keynote
Mac: http://appstore.com/mac// for example, http://appstore.com/mac/apple/keynote
Most companies and apps have a canonical App Store Short Link. This canonical URL is created by changing or removing certain characters (many of which are illegal or have special meaning in a URL (for example, "&")).
To create an App Store Short Link, apply the following rules to your company or app name:
Remove all whitespace
Convert all characters to lower-case
Remove all copyright (©), trademark (™) and registered mark (®) symbols
Replace ampersands ("&") with "and"
Remove most punctuation (See Listing 2 for the set)
Replace accented and other "decorated" characters (ü, å, etc.) with their elemental character (u, a, etc.)
Leave all other characters as-is.
Listing 2 Punctuation characters that must be removed.
!¡"#$%'()*+,-./:;<=>¿?@[]^_`{|}~
Below are some examples to demonstrate the conversion that takes place.
App Store
Company Name examples
Gameloft => http://appstore.com/gameloft
Activision Publishing, Inc. => http://appstore.com/activisionpublishinginc
Chen's Photography & Software => http://appstore.com/chensphotographyandsoftware
App Name examples
Ocarina => http://appstore.com/ocarina
Where’s My Perry? => http://appstore.com/wheresmyperry
Brain Challenge™ => http://appstore.com/brainchallenge
на самом деле это единственное, что по-прежнему надежно работает для Mac Store, по крайней мере
Полезно знать об этом, но, к сожалению, на iOS это перенаправляет через Safari (и дает уродливое сообщение «Не удается проверить идентичность сервера»).
НЕТ. Прочтите это - «Эти короткие ссылки в App Store предоставляются для удобства и не гарантируют ссылки на конкретное приложение или компанию». Так что в основном это дается случайным образом.
Попробуй так
http://itunes.apple.com/lookup?id= «здесь идентификатор вашего приложения» возвращает json. Отсюда найдите ключ «trackViewUrl», а значение - это желаемый URL. используйте этот URL (просто замените https:// на itms-apps://). Это отлично работает.
Например, если ваш идентификатор приложения - xyz, перейдите по этой ссылке http://itunes.apple.com/lookup?id=xyz
Затем найдите URL-адрес для ключа "trackViewUrl". Это URL-адрес вашего приложения в магазине приложений, и чтобы использовать этот URL-адрес в xcode, попробуйте это
NSString *iTunesLink = @"itms-apps://itunes.apple.com/us/app/Your app name/id Your app ID?mt=8&uo=4";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];
Спасибо
Я могу подтвердить, что если вы создадите приложение в iTunes connect, вы получите идентификатор своего приложения перед его отправкой.
Следовательно..
itms-apps://itunes.apple.com/app/id123456789
NSURL *appStoreURL = [NSURL URLWithString:@"itms-apps://itunes.apple.com/app/id123456789"];
if ([[UIApplication sharedApplication]canOpenURL:appStoreURL])
[[UIApplication sharedApplication]openURL:appStoreURL];
Работает удовольствие
Если у вас есть идентификатор магазина приложений, вам лучше использовать его. Особенно, если вы в будущем можете изменить название приложения.
http://itunes.apple.com/app/id378458261
Если у вас нет идентификатора магазина приложений, вы можете создать URL-адрес на основе этой документации https://developer.apple.com/library/ios/qa/qa1633/_index.html
+ (NSURL *)appStoreURL
{
static NSURL *appStoreURL;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
appStoreURL = [self appStoreURLFromBundleName:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"]];
});
return appStoreURL;
}
+ (NSURL *)appStoreURLFromBundleName:(NSString *)bundleName
{
NSURL *appStoreURL = [NSURL URLWithString:[NSString stringWithFormat:@"itms-apps://itunes.com/app/%@", [self sanitizeAppStoreResourceSpecifier:bundleName]]];
return appStoreURL;
}
+ (NSString *)sanitizeAppStoreResourceSpecifier:(NSString *)resourceSpecifier
{
/*
https://developer.apple.com/library/ios/qa/qa1633/_index.html
To create an App Store Short Link, apply the following rules to your company or app name:
Remove all whitespace
Convert all characters to lower-case
Remove all copyright (©), trademark (™) and registered mark (®) symbols
Replace ampersands ("&") with "and"
Remove most punctuation (See Listing 2 for the set)
Replace accented and other "decorated" characters (ü, å, etc.) with their elemental character (u, a, etc.)
Leave all other characters as-is.
*/
resourceSpecifier = [resourceSpecifier stringByReplacingOccurrencesOfString:@"&" withString:@"and"];
resourceSpecifier = [[NSString alloc] initWithData:[resourceSpecifier dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES] encoding:NSASCIIStringEncoding];
resourceSpecifier = [resourceSpecifier stringByReplacingOccurrencesOfString:@"[!¡\"#$%'()*+,-./:;<=>¿?@\\[\\]\\^_`{|}~\\s\\t\\n]" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, resourceSpecifier.length)];
resourceSpecifier = [resourceSpecifier lowercaseString];
return resourceSpecifier;
}
Проходит этот тест
- (void)testAppStoreURLFromBundleName
{
STAssertEqualObjects([AGApplicationHelper appStoreURLFromBundleName:@"Nuclear™"].absoluteString, @"itms-apps://itunes.com/app/nuclear", nil);
STAssertEqualObjects([AGApplicationHelper appStoreURLFromBundleName:@"Magazine+"].absoluteString, @"itms-apps://itunes.com/app/magazine", nil);
STAssertEqualObjects([AGApplicationHelper appStoreURLFromBundleName:@"Karl & CO"].absoluteString, @"itms-apps://itunes.com/app/karlandco", nil);
STAssertEqualObjects([AGApplicationHelper appStoreURLFromBundleName:@"[Fluppy fuck]"].absoluteString, @"itms-apps://itunes.com/app/fluppyfuck", nil);
STAssertEqualObjects([AGApplicationHelper appStoreURLFromBundleName:@"Pollos Hérmanos"].absoluteString, @"itms-apps://itunes.com/app/polloshermanos", nil);
STAssertEqualObjects([AGApplicationHelper appStoreURLFromBundleName:@"Niños and niñas"].absoluteString, @"itms-apps://itunes.com/app/ninosandninas", nil);
STAssertEqualObjects([AGApplicationHelper appStoreURLFromBundleName:@"Trond, MobizMag"].absoluteString, @"itms-apps://itunes.com/app/trondmobizmag", nil);
STAssertEqualObjects([AGApplicationHelper appStoreURLFromBundleName:@"!__SPECIAL-PLIZES__!"].absoluteString, @"itms-apps://itunes.com/app/specialplizes", nil);
}
В ряде ответов предлагается использовать itms или itms-apps, но Apple особо не рекомендует эту практику. Они предлагают только следующий способ открыть App Store:
Листинг 1Запуск App Store из приложения iOS
NSString *iTunesLink = @"https://itunes.apple.com/us/app/apple-store/id375380948?mt=8";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];
См. Последнее обновление https://developer.apple.com/library/ios/qa/qa1629/_index.html в марте 2014 г. на момент этого ответа.
Для приложений, поддерживающих iOS 6 и более поздних версий, Apple предлагает встроенный механизм представления App Store: SKStoreProductViewController.
- (void)loadProductWithParameters:(NSDictionary *)parameters completionBlock:(void (^)(BOOL result, NSError *error))block;
// Example:
SKStoreProductViewController* spvc = [[SKStoreProductViewController alloc] init];
spvc.delegate = self;
[spvc loadProductWithParameters:@{ SKStoreProductParameterITunesItemIdentifier : @(364709193) } completionBlock:^(BOOL result, NSError *error){
if (error)
// Show sorry
else
// Present spvc
}];
Обратите внимание, что в iOS6 блок завершения может не вызываться при наличии ошибок. Похоже, это ошибка, которая была устранена в iOS 7.
Создание ссылки может стать сложной проблемой при поддержке нескольких ОС и нескольких платформ. Например, WebObjects не поддерживается в iOS 7 (некоторые из них), некоторые ссылки, которые вы создаете, откроют другой магазин страны, а затем пользователь и т. д.
Есть библиотека с открытым исходным кодом под названием iLink, которая может вам помочь.
Преимущества этой библиотеки заключаются в том, что ссылки будут найдены и созданы во время выполнения (библиотека проверяет идентификатор приложения и ОС, в которой она работает, и выясняет, какую ссылку следует создать). Лучшее в этом заключается в том, что вам не нужно почти ничего настраивать перед использованием, чтобы не было ошибок и работать всегда. Это также замечательно, если у вас есть несколько целей в одном проекте, поэтому вам не нужно помнить, какой идентификатор приложения или ссылку использовать. Эта библиотека также будет предлагать пользователю обновить приложение, если в магазине есть новая версия (она встроена, и вы отключаете ее простым флагом), напрямую указывая на страницу обновления приложения, если пользователь соглашается.
Скопируйте 2 файла библиотеки в свой проект (iLink.h и iLink.m).
В вашем appDelegate.m:
#import "iLink.h"
+ (void)initialize
{
//configure iLink
[iLink sharedInstance].globalPromptForUpdate = YES; // If you want iLink to prompt user to update when the app is old.
}
и в том месте, где вы хотите открыть страницу рейтинга, например, просто используйте:
[[iLink sharedInstance] iLinkOpenAppPageInAppStoreWithAppleID: YOUR_PAID_APP_APPLE_ID]; // You should find YOUR_PAID_APP_APPLE_ID from iTunes Connect
Не забудьте импортировать iLink.h в тот же файл.
Там есть очень хорошая документация для всей библиотеки и примеры проектов для iPhone и Mac.
Это простой и короткий способ перенаправить / связать другое существующее приложение в магазине приложений.
NSString *customURL = @"http://itunes.apple.com/app/id951386316";
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:customURL]])
{
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];
}
Начиная с iOS 6, это правильно сделать с помощью класса SKStoreProductViewController.
Swift 5.x:
func openStoreProductWithiTunesItemIdentifier(_ identifier: String) {
let storeViewController = SKStoreProductViewController()
storeViewController.delegate = self
let parameters = [ SKStoreProductParameterITunesItemIdentifier : identifier]
storeViewController.loadProduct(withParameters: parameters) { [weak self] (loaded, error) -> Void in
if loaded {
// Parent class of self is UIViewContorller
self?.present(storeViewController, animated: true, completion: nil)
}
}
}
private func productViewControllerDidFinish(viewController: SKStoreProductViewController) {
viewController.dismiss(animated: true, completion: nil)
}
// Usage:
openStoreProductWithiTunesItemIdentifier("1234567")
Swift 3.x:
func openStoreProductWithiTunesItemIdentifier(identifier: String) {
let storeViewController = SKStoreProductViewController()
storeViewController.delegate = self
let parameters = [ SKStoreProductParameterITunesItemIdentifier : identifier]
storeViewController.loadProduct(withParameters: parameters) { [weak self] (loaded, error) -> Void in
if loaded {
// Parent class of self is UIViewContorller
self?.present(storeViewController, animated: true, completion: nil)
}
}
}
func productViewControllerDidFinish(_ viewController: SKStoreProductViewController) {
viewController.dismiss(animated: true, completion: nil)
}
// Usage:
openStoreProductWithiTunesItemIdentifier(identifier: "13432")
You can get the app's itunes item identifier like this: (instead of a static one)
Swift 3.2
var appID: String = infoDictionary["CFBundleIdentifier"]
var url = URL(string: "http://itunes.apple.com/lookup?bundleId=\(appID)")
var data = Data(contentsOf: url!)
var lookup = try? JSONSerialization.jsonObject(with: data!, options: []) as? [AnyHashable: Any]
var appITunesItemIdentifier = lookup["results"][0]["trackId"] as? String
openStoreProductViewController(withITunesItemIdentifier: Int(appITunesItemIdentifier!) ?? 0)
Swift 2.x:
func openStoreProductWithiTunesItemIdentifier(identifier: String) {
let storeViewController = SKStoreProductViewController()
storeViewController.delegate = self
let parameters = [ SKStoreProductParameterITunesItemIdentifier : identifier]
storeViewController.loadProductWithParameters(parameters) { [weak self] (loaded, error) -> Void in
if loaded {
// Parent class of self is UIViewContorller
self?.presentViewController(storeViewController, animated: true, completion: nil)
}
}
}
func productViewControllerDidFinish(viewController: SKStoreProductViewController) {
viewController.dismissViewControllerAnimated(true, completion: nil)
}
// Usage
openStoreProductWithiTunesItemIdentifier("2321354")
цель-C:
static NSInteger const kAppITunesItemIdentifier = 324684580;
[self openStoreProductViewControllerWithITunesItemIdentifier:kAppITunesItemIdentifier];
- (void)openStoreProductViewControllerWithITunesItemIdentifier:(NSInteger)iTunesItemIdentifier {
SKStoreProductViewController *storeViewController = [[SKStoreProductViewController alloc] init];
storeViewController.delegate = self;
NSNumber *identifier = [NSNumber numberWithInteger:iTunesItemIdentifier];
NSDictionary *parameters = @{ SKStoreProductParameterITunesItemIdentifier:identifier };
UIViewController *viewController = self.window.rootViewController;
[storeViewController loadProductWithParameters:parameters
completionBlock:^(BOOL result, NSError *error) {
if (result)
[viewController presentViewController:storeViewController
animated:YES
completion:nil];
else NSLog(@"SKStoreProductViewController: %@", error);
}];
[storeViewController release];
}
#pragma mark - SKStoreProductViewControllerDelegate
- (void)productViewControllerDidFinish:(SKStoreProductViewController *)viewController {
[viewController dismissViewControllerAnimated:YES completion:nil];
}
You can get
kAppITunesItemIdentifier(app's itunes item identifier) like this: (instead of a static one)
NSDictionary* infoDictionary = [[NSBundle mainBundle] infoDictionary];
NSString* appID = infoDictionary[@"CFBundleIdentifier"];
NSURL* url = [NSURL URLWithString:[NSString stringWithFormat:@"http://itunes.apple.com/lookup?bundleId=%@", appID]];
NSData* data = [NSData dataWithContentsOfURL:url];
NSDictionary* lookup = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
NSString * appITunesItemIdentifier = lookup[@"results"][0][@"trackId"];
[self openStoreProductViewControllerWithITunesItemIdentifier:[appITunesItemIdentifier intValue]];
быстро не забудьте импортировать и делегировать: import StoreKit class RateMeViewController: UIViewController, SKStoreProductViewControllerDelegate {
Это по-прежнему работает, однако, когда вы пойдете и нажмете «Написать отзыв», это не сработает. Вы должны нажать кнопку «Магазин» в верхнем углу, а затем нажать «Написать отзыв». Кто-нибудь знает обходной путь ??
«Написать обзор» пытается открыть другое модальное окно и терпит неудачу, вероятно, потому, что вы уже представляете его в модальном окне. Но Apple заставляет это делать. Кажется, нет правильного способа заставить обзоры работать. делая всю эту концепцию недействительной.
Этот json не всегда возвращает данные и иногда возвращает нулевой счетчик. Ненадежно получить идентификатор приложения перед отправкой.
-(IBAction)clickedUpdate
{
NSString *simple = @"itms-apps://itunes.apple.com/app/id1234567890";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:simple]];
}
замените id1234567890 на id и ваше десятизначное число
Это отлично работает на все устройства.
Это идет напрямую в магазин приложений, без перенаправлений.
Подходит для всех национальные магазины.
Верно, что вам следует перейти к использованиюloadProductWithParameters, но, если цель ссылки - обновить приложение, в котором вы на самом деле находитесь: возможно, лучше использовать этот «старомодный» подход.
Кроме того, для перехода на страницу разработчика (если вы хотите показать пользователю свой каталог приложений) вы можете использовать: NSString * simple = @ "itms-apps: //itunes.com/apps/YOUR_COMPANY_NAME";
Где мне найти этот идентификатор?
Лето 2015 ?! Как будто весь мир живет в одной стране. :(
itms-apps://itunes.apple.com/app/[appName]/[appID]
itms-apps://itunes.apple.com/developer/[developerName]/[developerID]
appName не нужен.
Для Xcode 9.1 и Swift 4:
import StoreKit
2. согласовать протокол
SKStoreProductViewControllerDelegate
3. Реализуйте протокол
func openStoreProductWithiTunesItemIdentifier(identifier: String) {
let storeViewController = SKStoreProductViewController()
storeViewController.delegate = self
let parameters = [ SKStoreProductParameterITunesItemIdentifier : identifier]
storeViewController.loadProduct(withParameters: parameters) { [weak self] (loaded, error) -> Void in
if loaded {
// Parent class of self is UIViewContorller
self?.present(storeViewController, animated: true, completion: nil)
}
}
}
3.1
func productViewControllerDidFinish(_ viewController: SKStoreProductViewController) {
viewController.dismiss(animated: true, completion: nil)
}
openStoreProductWithiTunesItemIdentifier(identifier: "here_put_your_App_id")
Примечание:
It is very important to enter the exact ID of your APP. Because this cause error (not show the error log, but nothing works fine because of this)
Я делаю то же самое, работаю на устройстве. Безуспешно
Согласно Последний документ Apple Вам нужно использовать
appStoreLink = "https://itunes.apple.com/us/app/apple-store/id375380948?mt=8"
или же
SKStoreProductViewController
Не могли бы вы обновить ссылку? Это кажется довольно интересным, если это не сработает.
Связанный документ не упоминает itms: или itms-apps:. Ссылки, использующие эту схему, отлично работают на моих устройствах под управлением iOS 12.
Несмотря на то, что здесь есть множество ответов, ни одно из предложений по связыванию с приложениями разработчиков, похоже, больше не работает.
Когда я был в последний раз, я смог заставить его работать, используя формат:
itms-apps://itunes.apple.com/developer/developer-name/id123456789
Это больше не работает, но удаление имени разработчика делает:
itms-apps://itunes.apple.com/developer/id123456789
он откроет App Store напрямую
NSString *iTunesLink = @"itms-apps://itunes.apple.com/app/ebl-
skybanking/id1171655193?mt=8";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];
Все ответы устарели и не работают; используйте метод ниже.
Все приложения разработчика: itms-apps://apps.apple.com/developer/developer-name/developerId
Одно приложение: itms-apps://itunes.apple.com/app/appId
Я думаю, что Apple предоставила новую ссылку для ссылки на приложение: https://apps.apple.com/app/id1445530088 или https://apps.apple.com/app/ {your_app_id}
Для ссылок на веб-сайты это правильный путь. Не могу поверить, что этот URL так нелепо найти.
это глубокие ссылки в App Store. URL-адрес с itunes.apple.com/app/appId перенаправляет на apps.apple.com/app/appId. Если вы скопируете URL-адрес со страницы App Store, он предоставит вам URL-адрес с доменом apps.apple.com. Таким образом, для создания ссылок на приложения в App Store наиболее актуальным представляется URL-адрес типа apps.apple.com/app/appId.
Для SWIFT 3.X и локализованных приложений может помочь этот ответ: stackoverflow.com/a/41765175/3143890