Як пов’язати додатки в магазині додатків


700

Я створюю безкоштовну версію своєї гри на 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

Відредаговано 02.02.2016

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

SKStoreProductViewController об'єктом , являє магазин , який дозволяє користувачеві придбати інші засоби масової інформації з App Store. Наприклад, ваш додаток може відображати магазин, щоб користувач міг придбати інший додаток.


З новин та оголошень для розробників Apple .

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

Щоб надіслати клієнтів до конкретної програми: http://itunes.com/apps/appname

Щоб надіслати клієнтів до списку додатків у магазині додатків: 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. Клацніть правою кнопкою миші або клацніть на імені елемента в iTunes, а потім у спливаючому меню виберіть "Скопіювати URL магазину iTunes".
  4. У вашій програмі створіть NSURLоб’єкт із скопійованою URL-адресою iTunes, а потім передайте цей об’єкт методу UIApplication's openURL:, щоб відкрити ваш предмет у App Store.

Приклад коду:

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

Швидкий 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)!)
    }

161
Порада полягає у використанні itms: // замість http: //, тоді він відкриється безпосередньо в магазині додатків. На iPhone він зробить 2 (!) Переадресації під час використання http, а 1 - під час використання itms. При використанні старих посилань на фобос (див. Вище) є 0 переадресацій. Використовуйте ідентифікатор від iTunes Connect, якщо використовуєте фобові посилання. Ви можете подати додаток, не включаючи двійковий код. Таким чином ви отримаєте ідентифікатор, перш ніж подавати фактичний двійковий файл. Я не пробував цього, але чув, що це працює.
— quano

11
Дивіться: developer.apple.com/library/ios/#qa/qa1633/_index.html (Білий простір потрібно просто прибрати.)
— Nathan S.

8
За винятком ... яке правильне значення використовувати appname? Це додаток "Відображуване ім'я групи"? Це нечутливі до регістру? Як обробляються порожні пробіли тощо?
— aroth

14
Це слід перевірити на справжньому пристрої.
— Protocole

7
ЦЕ ПОТРІБНО тестувати на справжньому пристрої, так! Я боровся з тим, щоб нічого не сталося протягом години, перш ніж підключити iPad і випробувати його там. Гех.
— Калле

361

Якщо ви хочете відкрити додаток безпосередньо в магазині додатків, вам слід скористатися:

itms-apps: // ...

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

Сподіваюся, що це допомагає.


EDIT: APR, 2017. itms-apps: // насправді знову працює в iOS10. Я тестував це.

EDIT: APR, 2013. Це більше не працює в iOS5 та вище. Просто використовуйте

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

і переспрямувань більше немає.


2
@PEZ На сьогоднішній день я бачу два перенаправлення при використанні http: // ... Відповідь для мене прекрасно працює - itms-apps: // ... безпосередньо відкриває додаток App Store на пристрої без перенаправлень.
— Джош Браун

4
Рокотило, ти впевнений, що це більше не працює? Чи можете ви опублікувати посилання?
— johndodo

8
На iOS. itmsвідкриває itunes. при цьому itms-appsвідкриває App Store. Це ключова відмінність, якщо спонукати користувачів до оновлення! (iOS 10)
— мсм

2
itms-appsвідкриває додаток App Store для мене через openURL:iOS 10.2. Здається, це не проблема.
— пкамб

1
Оскільки 10.3 цей метод працює, але він повинен пройти через проміжне спливаюче вікно "відкрити цю URL-адресу в магазині додатків"? Довідка: blog.branch.io/…
— gabry

51

Починаючи з iOS 6 правильним способом це зробити, використовуючи клас SKStoreProductViewController .

Швидкий 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")

Швидкий 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 програми таким чином: (замість статичного)

Швидкий 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)

Швидкий 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")

ціль-З :

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 не завжди повертає дані і повертає іноді підрахунок нуля. Не надійно отримати ідентифікатор програми перед надсиланням.
— Amber 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 , але якщо мета посилання - оновити додаток, який ви насправді знаходяться: можливо, краще використовувати цей «старомодний» підхід.


Також для переходу на сторінку розробника (якщо ви хочете показати користувачеві свій каталог додатків) ви можете використовувати: 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 Apps:

Назва компанії

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-адресі (наприклад, "&")).

Щоб створити коротке посилання магазину додатків, застосуйте такі правила до назви своєї компанії чи програми:

Видаліть все пробіли

Перетворити всі символи в малі регістри

Видаліть усі символи авторського права (©), торговельної марки (™) та зареєстрованої марки (®)

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

Видаліть більшість пунктуацій (див. Лістинг 2 для набору)

Замініть наголошені та інші "прикрашені" символи (ü, å тощо) їх елементарним характером (u, a тощо)

Залиште всі інші символи такими, які є.

Лістинг 2 Знаки пунктуації, які потрібно видалити.

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

Нижче наведено кілька прикладів, які демонструють конверсію, яка відбувається.

App Store

Приклади найменування компанії

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

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

Фотографія та програмне забезпечення Chen => http://appstore.com/chensphotographyandsoftware

Приклади імен додатків

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

Де мій Перрі? => http://appstore.com/wheresmyperry

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


1
це насправді єдине, що все ще працює надійним для магазину Mac, як мінімум,
— Раду Сіміонеску

Приємно знати про це, але, на жаль, на iOS це перенаправлення через Safari (і дає некрасиве повідомлення "Неможливо перевірити ідентичність сервера").
— sudo make install

НІ. Прочитайте це - "Ці короткі посилання в магазині додатків надаються як зручність і не гарантують посилання на певний додаток чи компанію". Так що в основному це дається випадковим чином.
— міцно

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

Мак:

[[NSWorkspace sharedWorkspace] openURL:appStoreURL];

Це працює, але ви також повинні видалити спеціальні символи, як тире, з назви програми.
— Macondo2Seattle

Дякую @ 3 revs та @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,everyone перевірити посилання на пристрої, а не в тренажері, я витрачав час на тестування симулятора.
— karthik

2
Дякую за інформацію про Simulator, я додам це до відповіді
— dulgan


18

Для мене це чудово працювало, використовуючи лише ідентифікатор додатка:

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

Кількість переадресацій - ZERO.


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

Якщо ви хочете встановити посилання на програми розробника, а ім'я розробника має розділові знаки або пробіли (наприклад, компанія, що займається розробкою, ТОВ), формуйте вашу URL-адресу так:

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

В іншому випадку він повертає "Цей запит не можна обробити" на iOS 4.3.3


1
Якщо це не допоможе вам, спробуйте такий синтаксис: itms-apps: //itunes.com/apps/ChuckSmith/id290402113 замінивши моє ім’я на вашу компанію та мій ідентифікатор на ваш ідентифікатор виконавця, який ви можете отримати за посиланням iTunes виробник: itunes.apple.com/linkmaker
— Чак Сміт

Ви також можете спробувати закодувати ці "спеціальні" символи - тобто замінити ". з "% 2E"
— wzs

це відповідь префекта!
— Сем Б

11

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


Цей мені допомогти, тому що посилання в моєму itunes-connect не працювало, і в генераторі воно є. дякую
— Дорад

9

Це працює і безпосередньо посилається на ios5

NSString *iTunesLink = @"http://itunes.apple.com/app/baseball-stats-tracker-touch/id490256272?mt=8";  
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];

8

Це простий і короткий спосіб перенаправити / зв’язати інші наявні програми в магазині додатків.

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

 if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:customURL]])
 {
       [[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];
 } 

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

Примітка:

Дуже важливо ввести точний ідентифікатор додатка. Оскільки ця помилка викликає (не показувати журнал помилок, але нічого не працює з-за цього)


1
Я роблю те саме, працюю на пристрої. Немає успіху
— Андреа Муньяні

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

Працює частування


4

Створення посилання може стати складною проблемою при підтримці декількох ОС та декількох платформ. Наприклад, 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.


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

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. скористайтеся цією 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]];

Дякую

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.