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

701

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

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

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

Любые идеи? Что такое схема URL для магазина приложений?

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

Ответы:

771

Отредактировано 2016-02-02

Начиная с iOS 6 был представлен класс SKStoreProductViewController . Вы можете связать приложение, не выходя из приложения. Фрагмент кода в Swift 3.x / 2.x и Objective-C является здесь .

Объект SKStoreProductViewController представляет магазин, который позволяет пользователю покупать другие носители в App Store. Например, ваше приложение может отображать магазин, чтобы позволить пользователю приобрести другое приложение.


Из новостей и объявлений для разработчиков Apple .

Привлекайте клиентов прямо к своему приложению в App Store с помощью ссылок iTunes. С помощью ссылок iTunes вы можете предоставить своим клиентам простой доступ к вашим приложениям в App Store прямо с вашего веб-сайта или из рекламных кампаний. Создать ссылку на iTunes легко и просто, чтобы направить клиентов либо в одно приложение, во все ваши приложения, либо в конкретное приложение с указанием названия вашей компании.

Чтобы отправить клиентов на конкретное приложение: http://itunes.com/apps/appname

Чтобы отправить клиентов в список приложений, которые есть в App Store: http://itunes.com/apps/developername

Чтобы отправить клиентов в определенное приложение с указанием названия вашей компании в URL: http://itunes.com/apps/developername/appname


Дополнительные замечания:

Вы можете заменить http://с itms://или , itms-apps://чтобы избежать переадресаций.

Обратите внимание, что itms://отправит пользователя в магазин iTunes и itms-apps://вместе с отправит его в App Store!

Для получения информации о наименовании см. 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. Щелкните правой кнопкой мыши или щелкните, удерживая клавишу Control, на имени элемента в iTunes, затем выберите «Копировать URL-адрес iTunes Store» во всплывающем меню.
  4. В своем приложении создайте NSURLобъект со скопированным URL-адресом iTunes, а затем передайте этот объект методу UIApplications openURL:, чтобы открыть свой элемент в App Store.

Образец кода:

NSString *iTunesLink = @"itms://itunes.apple.com/app/apple-store/id375380948?mt=8";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];

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)!)
    }
Nathan S.
источник
161
Совет должен использовать itms: // вместо http: //, тогда он откроется прямо в магазине приложений. На iPhone будет 2 (!) Перенаправления при использовании http и 1 при использовании itms. При использовании более старых ссылок Фобос (см. Выше), перенаправления 0. Используйте идентификатор из iTunes Connect, если используете ссылки Фобоса. Вы можете отправить заявку, не включая бинарный файл. Таким образом, вы получите идентификатор, прежде чем отправлять фактический двоичный файл. Я не пробовал это, но я слышал, что это работает.
квано
11
См .: developer.apple.com/library/ios/#qa/qa1633/_index.html (Пустое пространство должно быть просто удалено.)
Натан С.
8
Кроме ... для чего нужно использовать правильное значение appname? Это приложение "Отображаемое имя пакета"? Это без учета регистра? Как обрабатываются пробелы и т. Д.?
aroth
14
Это должно быть проверено на реальном устройстве.
Протокол
7
Это ДОЛЖНО быть проверено на реальном устройстве, да! Я боролся с тем, чтобы ничего не происходило в течение часа, прежде чем подключить iPad и протестировать его там. Geh.
Калле
361

Если вы хотите открыть приложение непосредственно в App Store, вы должны использовать:

ITMS-приложения: // ...

Таким образом, он будет непосредственно открывать приложение App Store на устройстве, вместо того, чтобы сначала идти в iTunes, а затем только открывать App Store (при использовании только itms: //)

Надеюсь, это поможет.


РЕДАКТИРОВАТЬ: APR, 2017. itms-apps: // фактически снова работает в iOS10. Я проверял это.

РЕДАКТИРОВАТЬ: APR, 2013. Это больше не работает в iOS5 и выше. Просто используйте

https://itunes.apple.com/app/id378458261

и нет больше перенаправлений.

GeneCode
источник
2
@PEZ На сегодняшний день я вижу два перенаправления при использовании http: // ... Ответ отлично работает для меня - itms-apps: // ... напрямую открывает приложение App Store на устройстве без каких-либо перенаправлений.
Джош Браун
4
Рокотилос, ты уверен, что это больше не работает? Вы можете опубликовать ссылку?
Johndodo
8
На iOS. itmsоткрывает itunes. пока itms-appsоткрывает App Store. Это ключевое отличие, если вы предлагаете пользователям обновить! (IOS 10)
MCM
2
itms-appsоткрывает приложение App Store для меня через openURL:iOS 10.2. Кажется, не проблема.
pkamb
1
Начиная с 10.3 этот метод работает, но он должен пройти через промежуточное всплывающее окно «открыть этот URL в магазине приложений»? Ссылка: blog.branch.io/…
gabry
51

Начиная с 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")

Вы можете получить идентификатор элемента приложения itunes следующим образом: (вместо статического)

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];
}

Вы можете получить kAppITunesItemIdentifier(идентификатор элемента приложения в itunes) следующим образом: (вместо статического)

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]];
Рамис
источник
4
в быстром не забывайте импортировать и делегировать: импортировать класс StoreKit RateMeViewController: UIViewController, SKStoreProductViewControllerDelegate {
djdance
Это все еще работает, однако, когда вы идете и нажимаете «Написать отзыв», это не работает. Вы должны нажать кнопку «Магазин» в верхнем углу, а затем нажать «Написать отзыв». Кто-нибудь знает обходной путь ??
socca1157
«Написать отзыв» пытается открыть другой модальный режим и завершается неудачей, возможно, потому что вы уже представляете модальный. Но Apple заставляет это. Так что, похоже, нет правильного способа заставить отзывы работать. делая всю эту концепцию недействительной.
AmitP
Этот json не всегда возвращает данные и иногда возвращает ноль. Не надежно получить идентификатор приложения перед отправкой.
Янтарь K
41

На лето 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 , но если цель ссылки - обновить приложение, в котором вы на самом деле находитесь: возможно, лучше использовать этот «старомодный» подход.

Joe Blow
источник
Кроме того, для перехода на страницу разработчика (если вы хотите показать пользователю свой каталог приложений) вы можете использовать: NSString * simple = @ "itms-apps: //itunes.com/apps/YOUR_COMPANY_NAME";
TheBestBigAl
2
Где я могу найти этот идентификатор?
mcfly soft
1
Лето 2015 ?! Как будто весь мир живет в одной стране. :(
nacho4d
39

Apple только что объявила URL-адреса appstore.com.

https://developer.apple.com/library/ios/qa/qa1633/_index.html

Существует три типа коротких ссылок в App Store, в двух формах, один для приложений iOS, другой для приложений Mac:

название компании

iOS: http://appstore.com/ например, http://appstore.com/apple

Mac: http://appstore.com/mac/ например, http://appstore.com/mac/apple

Название приложения

iOS: http://appstore.com/ например, http://appstore.com/keynote

Mac: http://appstore.com/mac/ например, http://appstore.com/mac/keynote

Приложение от компании

iOS: http://appstore.com/ / например, http://appstore.com/apple/keynote

Mac: http://appstore.com/mac/ / например, http://appstore.com/mac/apple/keynote

Большинство компаний и приложений имеют каноническую короткую ссылку в App Store. Этот канонический URL-адрес создается путем изменения или удаления определенных символов (многие из которых являются недопустимыми или имеют специальное значение в URL-адресе (например, «&»)).

Чтобы создать короткую ссылку в App Store, примените следующие правила к названию вашей компании или приложения:

Удалить все пробелы

Конвертировать все символы в нижний регистр

Удалите все символы авторского права (©), товарного знака (™) и зарегистрированного знака (®)

Заменить амперсанды ("&") на "и"

Удалите большинство знаков препинания (см. Листинг 2)

Замените акцентированные и другие «украшенные» символы (ü, å и т. Д.) Их элементарными символами (u, a и т. Д.)

Оставьте все остальные символы как есть.

Перечисление 2 Знаки пунктуации, которые должны быть удалены.

! ¡ "# $% '() * +, - / :; <=> ¿@ [] ^ _`.? {|} ~

Ниже приведены некоторые примеры, демонстрирующие происходящее преобразование.

Магазин приложений

Примеры названий компаний

Gameloft => http://appstore.com/gameloft

Activision Publishing, Inc. => http://appstore.com/activisionpublishinginc

Фотография и программное обеспечение Чена => http://appstore.com/chensphotographyandsoftware

Примеры названий приложений

Окарина => http://appstore.com/ocarina

Где мой Перри? => http://appstore.com/wheresmyperry

Brain Challenge ™ => http://appstore.com/brainchallenge

Dev01
источник
1
на самом деле это единственное, что по-прежнему работает надежно для Mac Store, по крайней мере
Раду Симионеску
Полезно знать об этом, но, к сожалению, на iOS это перенаправляет через Safari (и выдает ужасное сообщение «Cannot Verify Server Identity»).
sudo make install
NO. Прочтите это: «Эти короткие ссылки в App Store предоставляются для удобства и не гарантируют ссылки на определенное приложение или компанию». Так что в основном это случайно.
Дуразно
30

Этот код генерирует ссылку 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-приложения с 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];
Tibidabo
источник
Это работает, но вы также должны удалить специальные символы, такие как тире, из названия приложения.
Macondo2Seattle
Спасибо @ 3 оборота и @BlackRider
Ганеш Гутури
Можем ли мы открыть и показать все приложения, загруженные разработчиком, на одной странице?
Имран
Это было единственное встраиваемое решение, которое работало для меня с минимальным перенаправлением и максимальной обработкой пробелов в имени приложения.
LordParsley
29

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

  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

дулган
источник
3
+1 для itunes.apple.com/linkmaker, каждый тест на ссылку в устройстве не в симуляторе, я тратил время на тестирование симулятора.
Картик
2
Спасибо за информацию о симуляторе, я добавлю это к ответу
Dulgan
18

Это отлично сработало, используя только APP ID:

 NSString *urlString = [NSString stringWithFormat:@"http://itunes.apple.com/app/id%@",YOUR_APP_ID];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];

Количество переадресаций равно нулю.

Алмас Адильбек
источник
13

В ряде ответов предлагается использовать «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.

Бен Флинн
источник
12

Если вы хотите сослаться на приложения разработчика, а имя разработчика содержит знаки препинания или пробелы (например, Development Company, LLC), создайте свой URL-адрес следующим образом:

itms-apps://itunes.com/apps/DevelopmentCompanyLLC

В противном случае он возвращает «Этот запрос не может быть обработан» на iOS 4.3.3.

Эндрю
источник
1
Если это не работает для вас, попробуйте следующий синтаксис: itms-apps: //itunes.com/apps/ChuckSmith/id290402113, заменив мое имя вашей компанией и мой ID на ваш Artist ID, который вы можете получить по ссылке iTunes Создатель: itunes.apple.com/linkmaker
Чак Смит
Вы также можете попытаться закодировать эти «специальные» символы - т.е. заменить «.» с "% 2E"
wzs
это префект ответ!
Сэм Б
11

Вы можете получить ссылку на определенный элемент в магазине приложений или iTunes через производителя ссылок по адресу: http://itunes.apple.com/linkmaker/.

Octavio Berlanga
источник
Это мне помогает, потому что ссылка в моем itunes-connect не работает, а в генераторе это работает. спасибо
Дорад
9

Это работает и напрямую связывает в ios5

NSString *iTunesLink = @"http://itunes.apple.com/app/baseball-stats-tracker-touch/id490256272?mt=8";  
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];
TouchMint
источник
8

Это простой и короткий способ перенаправить / связать другое существующее приложение в магазине приложений.

 NSString *customURL = @"http://itunes.apple.com/app/id951386316";

 if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:customURL]])
 {
       [[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];
 } 
iChirag
источник
6

Для 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")

Замечания:

Очень важно ввести точный идентификатор вашего приложения. Потому что это причина ошибки (не показывать журнал ошибок, но ничего не работает из-за этого)

xhinoda
источник
1
Я делаю то же самое, работает на устройстве. Нет успеха
Andrea Mugnaini
4

Я могу подтвердить, что, если вы создадите приложение в 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];

Работает лакомство

user1641587
источник
4

Создание ссылки может стать сложной проблемой при поддержке нескольких ОС и нескольких платформ. Например, WebObjects не поддерживается в iOS 7 (некоторые из них), некоторые ссылки, которые вы создадите, откроют магазин в другой стране, чем пользователь и т. Д.

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

Преимущества этой библиотеки в том, что ссылки будут найдены и созданы во время выполнения (библиотека проверит идентификатор приложения и ОС, в которой оно работает, и выяснит, какую ссылку следует создать). Лучшее в этом то, что вам не нужно ничего настраивать, прежде чем использовать его, так что это безошибочно и будет работать всегда. Это также хорошо, если у вас мало целей в одном проекте, поэтому вам не нужно помнить, какой идентификатор приложения или ссылку использовать. Эта библиотека также предложит пользователю обновить приложение, если в магазине появится новая версия (она встроена, и вы отключите ее простым флагом), указывающей на страницу обновления для приложения, если пользователь согласится.

Скопируйте 2 файла библиотеки в свой проект (iLink.h & iLink.m).

В вашем приложении Delegate.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.

Jameson
источник
4

По крайней мере, iOS 9 и выше

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

Приложение

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

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

itms-apps://itunes.apple.com/developer/[developerName]/[developerID]
Якуб Трухларж
источник
appNameне обязательно.
DawnSong
4

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

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

или

SKStoreProductViewController 
Михир Оза
источник
Можете ли вы обновить свою ссылку, пожалуйста? Это кажется довольно интересным, если это не сработает.
Реми Вирин
Связанный документ не упоминает itms:или itms-apps:. Ссылки, использующие эту схему, прекрасно работают на моих устройствах под управлением iOS 12.
Тео,
4

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

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

itms-apps://itunes.apple.com/developer/developer-name/id123456789

Это больше не работает, но удаление имени разработчика делает:

itms-apps://itunes.apple.com/developer/id123456789
Леон
источник
3

Если у вас есть идентификатор магазина приложений, лучше всего его использовать. Особенно, если вы в будущем можете изменить название приложения.

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);
}
hfossli
источник
3

Все ответы устарели и не работают; используйте метод ниже.

Все приложения разработчика:
itms-apps://apps.apple.com/developer/developer-name/developerId

Одно приложение:
itms-apps://itunes.apple.com/app/appId

Карен Карапетян
источник
1

он откроет App Store напрямую

NSString *iTunesLink = @"itms-apps://itunes.apple.com/app/ebl- 
skybanking/id1171655193?mt=8";

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];
Бисваджит Баник
источник
0

Попробуй так

http://itunes.apple.com/lookup?id= "идентификатор вашего приложения здесь" возвращает json. Из этого найдите ключ " trackViewUrl ", и значением будет нужный 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]];

Спасибо

Tunvir Rahman Tusher
источник