Как сделать ссылку на приложения в магазине приложений

Я создаю бесплатную версию игры для iPhone. Я хочу, чтобы внутри бесплатной версии была кнопка, которая переводит людей к платной версии в магазине приложений. Если я использую стандартную ссылку

http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=300136119&mt=8

iPhone сначала открывает Safari, а затем магазин приложений. Я использовал другие приложения, которые напрямую открывают магазин приложений, поэтому знаю, что это возможно.

Любые идеи? Какова схема URL-адресов магазина приложений?

Для SWIFT 3.X и локализованных приложений может помочь этот ответ: stackoverflow.com/a/41765175/3143890

LukeSideWalker 20.01.2017 16:53
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
727
1
751 913
25
Перейти к ответу Данный вопрос помечен как решенный

Ответы 25

Просто замените 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 предлагает следующие шаги и код для запуска магазина из приложения:

  1. Запустите iTunes на своем компьютере.
  2. Найдите элемент, на который хотите создать ссылку.
  3. Щелкните правой кнопкой мыши или щелкните имя элемента в iTunes, удерживая клавишу Control, затем выберите «Копировать URL-адрес iTunes Store» во всплывающем меню.
  4. В своем приложении создайте объект 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 при использовании ссылок на фобос. Вы можете отправить приложение без включения двоичного файла. Таким образом, вы получите идентификатор до того, как отправите фактический двоичный файл. Я не пробовал, но слышал, что это работает.

quano 14.03.2010 04:59

Есть ли способ сделать такую ​​ссылку и по-прежнему поддерживать статус партнера?

radven 21.12.2010 03:57

Я не уверен. Вы можете задать этот вопрос как отдельный вопрос, так как вы, вероятно, получите больше ответов.

Nathan S. 21.12.2010 22:06

Что делать, если имя вашего приложения содержит пробелы? Будет ли это заменено подчеркиванием в ссылке?

Boon 18.04.2011 06:08

См .: developer.apple.com/library/ios/#qa/qa1633/_index.html (Пробелы нужно просто удалить.)

Nathan S. 18.04.2011 06:53

Ссылка в этом посте не работает; содержание выглядит так, как будто оно взято из фрагмента новостей, опубликованного 6 января 2010 г. У Натана С. ссылка получше.

Adam Rosenfield 17.09.2011 00:48

Кроме ... какое правильное значение использовать для appname? Это "Отображаемое имя пакета" приложения? Это без учета регистра? Как обрабатываются пробелы и т. д.?

aroth 23.09.2011 04:51

@aroth, правильное имя для appname - это имя, которое вы дали (или собираетесь сделать) в iTunesConnect при загрузке приложения в первый раз. Поэтому вы не сможете проверить ссылку до того, как приложение, наконец, появится в магазине. Чтобы преодолеть это, я использовал ссылку на домашнюю страницу моего приложения, откуда я веду через ссылку на магазин (и, конечно же, предоставил другую информацию). С первым обновлением своего приложения я напрямую связался с магазином.

Hermann Klecker 06.02.2012 21:04

Это следует проверить на реальном устройстве.

Protocole 07.02.2012 13:31

@quano Использование полного URL-адреса itunes.apple.com с http (вместо itunes.com) также напрямую открывает магазин приложений.

Andrew Hershberger 28.03.2012 19:00

@AndrewHershberger Но quano говорит, что использование itms уменьшает количество перенаправлений, что делает его удобнее для пользователя.

Flipper 05.07.2012 22:54

Это ДОЛЖНО быть протестировано на реальном устройстве, да! Я боролся, чтобы ничего не происходило около часа, прежде чем подключить iPad и протестировать его там. Гех.

Kalle 16.08.2012 22:42

@bagusflyer См. ссылку на QA1633, там есть все необходимые детали по именованию.

Nathan S. 14.09.2012 20:38

@GMsoF, это было давно, и я не уверен, применяются ли перенаправления до сих пор. В любом случае, вы можете найти ссылку на фобос ниже. phobos.apple.com/WebObjects/MZStore.woa/wa/…. Просто измените идентификатор на идентификатор своего приложения.

quano 07.03.2013 16:02

Google показывает ссылку "Будет видно в ..." при загрузке в Google Play. Причина, по которой Apple не показывает эту ссылку при загрузке, в том ...? > :( Это оставлено на счет небезопасности поиска новостей, сообщений в блогах и форумах, которые могут быть старыми и недействительными. По крайней мере, Натан С. полезен, так что +1 за это!

Henrik Erlandsson 23.05.2013 17:57
itunes.com/apps/developername у меня не работает. Можно ли открыть и показать все приложения, загруженные разработчиком, на одной странице?
Imran 12.03.2014 14:55

@Imran Я полагаю, вы заменяете "developername" своим именем разработчика? См. Связанный QA1633 для получения информации о том, как получить правильное имя разработчика.

Nathan S. 12.03.2014 19:28

Спасибо, Натан, но я не могу его получить. Подскажите, пожалуйста, работает ли эта функция в последнем обновлении.

Imran 13.03.2014 11:00

предположим, что мое имя разработчика - Имран, тогда я прохожу ... appstore.com/imran...So это действительный, но не работает.

Imran 13.03.2014 11:13

@Imran Я предлагаю задать этот вопрос в отдельном вопросе, вернувшись к нему для справки.

Nathan S. 15.03.2014 00:42

В имени моего приложения есть пробелы. Как мне поместить название моего приложения в конец ссылки? @HermannKlecker

WowBow 12.06.2014 16:27

@WowBow См. Комментарий выше - пробелы удалены.

Nathan S. 12.06.2014 18:26

Допустимо ли использовать только идентификатор приложения, например itms-apps: //itunes.apple.com/app/id123456789? mt = 8 Генератор ссылок использует «название магазина приложений», которое я планирую изменить при следующем обновлении, но оно еще не установлено ...

Gavin Hope 15.10.2014 11:24

Я рекомендую использовать путь с именем разработчика перед именем приложения; Таким образом, если имя вашего приложения изменится, пользователь все равно попадет в список приложений для разработчиков.

avance 19.12.2014 02:08

попробовал обновить на симуляторе, и я получаю ошибку на странице браузера "адрес недействителен"

Laur Stefan 03.03.2015 04:30

Если вы используете itms: он не покажет вам возможность обновления, если доступно обновление. Вместо этого используйте itms-apps: // или https: //.

Zaartha 11.01.2016 14:42

Для поиска по ссылке у Apple теперь намного лучше и проще интерфейс: linkmaker.itunes.apple.com

Soldeplata Saketos 23.07.2016 12:22

На iOS. itms открывает itunes. в то время как itms-apps открывает App Store. Это ключевое различие при запросе пользователей на обновление! (iOS 10)

mcm 17.12.2016 01:49

Фрагменты кода в Быстрый и объективный-c

Ramis 23.01.2017 17:44

В высоко оцененном комментарии говорится, что нужно использовать itms:// ... но при этом открывается приложение iTunes, а не приложение App Store! Вместо этого используйте itms-apps://.

pkamb 04.03.2017 02:07

Обратите внимание, что любые приведенные здесь ссылки не работают в симуляторе (iOS 11 beta3), но работают на устройстве (iOS 10.3).

Altimac 25.07.2017 18:56

В настоящее время (iOS 11) для открытия страницы разработчика необходимо использовать ссылку, подобную этой: itms-apps: //itunes.apple.com/developer/johndoe/id123456789

Leszek Szary 04.05.2018 23:56

Обратите внимание, что SKStoreProductViewController работает очень медленно на устройствах iOS 12. Иногда мне требуется более 10 секунд для загрузки страницы продукта, поэтому я бы не рекомендовал использовать этот класс на iOS 12, чтобы не потерять всех нетерпеливых пользователей. (см. форумы.developer.apple.com/thread/107618)

Theo 13.11.2018 14:08

как открыть в App Store вместо iTunes Store? Также лучше не включать us в ссылку.

user924 13.05.2019 00:57

и приложение iTunes Store может быть удалено пользователем

user924 13.05.2019 00:59

Если вы хотите открыть приложение прямо в 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 17.01.2011 22:55

@PEZ На сегодняшний день я вижу два перенаправления при использовании http: // ... У меня ответ отлично работает - itms-apps: // ... напрямую открывает приложение App Store на устройстве без каких-либо перенаправлений.

Josh Brown 03.02.2011 10:20

Признаюсь, запросов я не отслеживал. =) Я тоже сейчас перейду на imts-apps.

PEZ 03.02.2011 12:04

кучу помогает, спасибо. fwiw, используя только "itms:" на ipad2 / ios 4, я получаю перенаправление, а с "itms-apps:" - нет.

orion elenzil 08.08.2011 07:19

Рокотилос, ты уверен, что это больше не работает? Вы можете разместить ссылку?

johndodo 19.05.2013 21:33

Можем ли мы открыть и показать все приложения, загруженные разработчиком, на одной странице?

Imran 12.03.2014 14:56

Это действительно помогает. Мне нужен был этот конкретный ответ, потому что мы перешли на универсальное приложение. Нам нужно избегать ссылки на имя приложения в URL-адресе (поскольку оно меняется), указывая пользователю на то самое приложение, которое будет заменено универсальным приложением.

Alyoshak 24.06.2014 18:48

На iOS. itms открывает itunes. в то время как itms-apps открывает App Store. Это ключевое различие при запросе пользователей на обновление! (iOS 10)

mcm 17.12.2016 01:40
itms действителен прямо сейчас, однако itms-apps или itms-apps недействительны. Например, сафари сообщает, что itms-apps://itunes.apple.com/us/app/apple-store/id375380948 недействителен на любом устройстве iOS 10. @mcm
DawnSong 24.02.2017 07:04
itms-apps открывает для меня приложение App Store через openURL: в iOS 10.2. Кажется, нет проблем.
pkamb 04.03.2017 02:06

Начиная с версии 10.3 этот метод работает, но он должен проходить через всплывающее окно промежуточного отображения «открыть этот URL-адрес в магазине приложений»? Ссылка: blog.branch.io/…

gabry 20.07.2017 17:48

Спасибо за это .. Работает как ссылка в play store :)

Ask Bytes 09.03.2019 18:01

@DawnSong, дело не в Safari, а в приложении, которое вы разрабатываете

user924 13.05.2019 01:04

Если вы хотите разместить ссылку на приложения разработчика и в имени разработчика есть знаки препинания или пробелы (например, 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

Chuck Smith 10.01.2012 16:40

Вы также можете попробовать закодировать эти «специальные» символы - например, заменить «.» с "% 2E"

wzs 07.03.2012 12:50

это лучший ответ!

Sam B 02.03.2013 03:50

Это работает и напрямую связывается в 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];

Это работает, но вам также необходимо удалить специальные символы, такие как тире, из имени приложения.

TotoroTotoro 30.04.2012 21:27

Спасибо @ 3 revs и @BlackRider

Ganesh Guturi 19.03.2013 15:30

Можем ли мы открыть и показать все приложения, загруженные разработчиком, на одной странице?

Imran 12.03.2014 14:56

Это было единственное решение, которое сработало для меня с минимальным количеством перенаправлений и максимальной обработкой пробелов в имени приложения.

LordParsley 22.04.2015 18:42

Чтобы иметь прямую ссылку без перенаправления:

  1. Используйте средство создания ссылок iTunes http://itunes.apple.com/linkmaker/, чтобы получить настоящую прямую ссылку
  2. Замените http:// на itms-apps://
  3. Открываем ссылку с [[UIApplication sharedApplication] openURL:url];

Будьте осторожны, эти ссылки работают только на реальных устройствах, а не в симуляторе.

Источник: https://developer.apple.com/library/ios/#qa/qa2008/qa1629.html

+1 для itunes.apple.com/linkmaker, все тестируют ссылку в устройстве, а не в симуляторе, я зря тратил время на тестирование симулятора.

karthik 03.09.2013 14:43

Спасибо за информацию о Симуляторе, добавлю в ответ

dulgan 03.09.2013 18:39

Это отлично сработало для меня, используя только 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 не работала, а в генераторе работает. Спасибо

Dorad 06.11.2015 15:10

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, по крайней мере

Radu Simionescu 19.10.2015 03:05

Полезно знать об этом, но, к сожалению, на iOS это перенаправляет через Safari (и дает уродливое сообщение «Не удается проверить идентичность сервера»).

sudo make install 16.01.2016 01:52

НЕТ. Прочтите это - «Эти короткие ссылки в App Store предоставляются для удобства и не гарантируют ссылки на конкретное приложение или компанию». Так что в основном это дается случайным образом.

durazno 27.09.2016 10:20

Попробуй так

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 {

djdance 12.04.2016 00:45

Это по-прежнему работает, однако, когда вы пойдете и нажмете «Написать отзыв», это не сработает. Вы должны нажать кнопку «Магазин» в верхнем углу, а затем нажать «Написать отзыв». Кто-нибудь знает обходной путь ??

socca1157 21.05.2016 21:59

«Написать обзор» пытается открыть другое модальное окно и терпит неудачу, вероятно, потому, что вы уже представляете его в модальном окне. Но Apple заставляет это делать. Кажется, нет правильного способа заставить обзоры работать. делая всю эту концепцию недействительной.

AmitP 23.01.2017 17:41

Этот json не всегда возвращает данные и иногда возвращает нулевой счетчик. Ненадежно получить идентификатор приложения перед отправкой.

Amber K 04.02.2019 16:06

Начиная с лета 2015 года ...

-(IBAction)clickedUpdate
{
    NSString *simple = @"itms-apps://itunes.apple.com/app/id1234567890";
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:simple]];
}

замените id1234567890 на id и ваше десятизначное число

  1. Это отлично работает на все устройства.

  2. Это идет напрямую в магазин приложений, без перенаправлений.

  3. Подходит для всех национальные магазины.

  4. Верно, что вам следует перейти к использованиюloadProductWithParameters, но, если цель ссылки - обновить приложение, в котором вы на самом деле находитесь: возможно, лучше использовать этот «старомодный» подход.

Кроме того, для перехода на страницу разработчика (если вы хотите показать пользователю свой каталог приложений) вы можете использовать: NSString * simple = @ "itms-apps: //itunes.com/apps/YOUR_COMPANY_NAME";

TheBestBigAl 18.08.2015 12:49

Где мне найти этот идентификатор?

mcfly soft 18.03.2016 14:31

Лето 2015 ?! Как будто весь мир живет в одной стране. :(

nacho4d 11.09.2018 05:31

Минимум iOS 9 и выше

  • Открыть прямо в App Store

Приложение

itms-apps://itunes.apple.com/app/[appName]/[appID]

Список приложений разработчика

itms-apps://itunes.apple.com/developer/[developerName]/[developerID]
appName не нужен.
DawnSong 21.11.2019 08:11

Для Xcode 9.1 и Swift 4:

  1. Импортировать StoreKit:
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)
}
  1. Как использовать:
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)

Я делаю то же самое, работаю на устройстве. Безуспешно

Andrea Mugnaini 20.12.2017 05:24

Согласно Последний документ Apple Вам нужно использовать

appStoreLink = "https://itunes.apple.com/us/app/apple-store/id375380948?mt=8"  

или же

SKStoreProductViewController 

Не могли бы вы обновить ссылку? Это кажется довольно интересным, если это не сработает.

Rémy Virin 07.06.2018 05:58

Связанный документ не упоминает itms: или itms-apps:. Ссылки, использующие эту схему, отлично работают на моих устройствах под управлением iOS 12.

Theo 13.11.2018 13:57

Несмотря на то, что здесь есть множество ответов, ни одно из предложений по связыванию с приложениями разработчиков, похоже, больше не работает.

Когда я был в последний раз, я смог заставить его работать, используя формат:

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 так нелепо найти.

Magnus W 11.08.2020 15:31

это глубокие ссылки в 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.

Samuël 14.01.2021 16:46

Другие вопросы по теме