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


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.