Как сделать ссылку на приложение в магазине приложений - PullRequest
668 голосов
/ 12 января 2009

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

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

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

Есть идеи? Что такое схема URL для магазина приложений?

Ответы [ 22 ]

738 голосов
/ 26 февраля 2010

Изменено 2016-02-02

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

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


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

Привлекайте клиентов прямо к вашему приложению в App Store с помощью iTunes Links С помощью ссылок 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://, чтобы избежать перенаправлений.

Для получения информации о наименовании см. 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, затем передайте этот объект методу UIApplication openURL: метод, чтобы открыть свой элемент в App Store.

Пример кода:

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

Swift 3.0

   let urlStr = "itms://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)!)
    }
341 голосов
/ 30 декабря 2010

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

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

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

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


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

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

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

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

47 голосов
/ 14 августа 2015

Начиная с iOS 6 правильный способ сделать это с помощью SKStoreProductViewController class.

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")

Objective-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]];
38 голосов
/ 14 августа 2015

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

33 голосов
/ 14 октября 2013

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 Знаки пунктуации, которые необходимо удалить.

!

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

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

App Store

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

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

30 голосов
/ 01 марта 2012

Этот код генерирует ссылку 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];
28 голосов
/ 12 января 2009

Просто измените «itunes» на «Фобос» в ссылке на приложение.

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

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

26 голосов
/ 29 мая 2012

Для прямой ссылки без перенаправления:

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

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

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

17 голосов
/ 17 июля 2012

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

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

Число перенаправлений равно нулю.

13 голосов
/ 18 июня 2014

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...