Como vincular a aplicativos na app Store

700

Estou criando uma versão gratuita do meu jogo para iPhone. Quero ter um botão na versão gratuita que leve as pessoas à versão paga na loja de aplicativos. Se eu usar um link padrão

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

o iPhone abre o Safari primeiro e depois a loja de aplicativos. Eu usei outros aplicativos que abrem a loja de aplicativos diretamente, então sei que é possível.

Alguma ideia? Qual é o esquema de URL para a loja de aplicativos?

mate
fonte
1
Para SWIFT 3.xe aplicativos localizados esta resposta pode ajudar: stackoverflow.com/a/41765175/3143890
LukeSideWalker

Respostas:

771

Editado em 02/02/2016

A partir do iOS 6, a classe SKStoreProductViewController foi introduzida. Você pode vincular um aplicativo sem sair do aplicativo. Trecho de código em Swift 3.x / 2.x e Objective-C é aqui .

Um objeto SKStoreProductViewController apresenta uma loja que permite ao usuário comprar outra mídia na App Store. Por exemplo, seu aplicativo pode exibir a loja para permitir que o usuário compre outro aplicativo.


De Notícias e anúncios para desenvolvedores da Apple .

Direcione clientes diretamente para o seu aplicativo na App Store com links do iTunes Com os links do iTunes, você pode oferecer aos clientes uma maneira fácil de acessar seus aplicativos na App Store diretamente do site ou das campanhas de marketing. Criar um link do iTunes é simples e pode ser feito para direcionar os clientes para um único aplicativo, todos os seus aplicativos ou para um aplicativo específico com o nome da sua empresa especificado.

Para enviar clientes para um aplicativo específico: http://itunes.com/apps/appname

Para enviar clientes para uma lista de aplicativos que você tem na App Store: http://itunes.com/apps/developername

Para enviar clientes para um aplicativo específico com o nome da sua empresa incluído no URL: http://itunes.com/apps/developername/appname


Notas Adicionais:

Você pode substituir http://por itms://ou itms-apps://evitar redirecionamentos.

Observe que itms://o usuário será enviado para a loja do iTunes e, itms-apps://em seguida, enviado para a App Store!

Para obter informações sobre nomes, consulte Apple QA1633:

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

Editar (a partir de janeiro de 2015):

Os links itunes.com/apps devem ser atualizados para appstore.com/apps. Consulte QA1633 acima, que foi atualizado. Um novo QA1629 sugere estas etapas e código para iniciar a loja a partir de um aplicativo:

  1. Inicie o iTunes no seu computador.
  2. Procure o item ao qual deseja vincular.
  3. Clique com o botão direito do mouse ou clique com a tecla Ctrl pressionada no nome do item no iTunes e escolha "Copiar URL da iTunes Store" no menu pop-up.
  4. No seu aplicativo, crie um NSURLobjeto com o URL do iTunes copiado e passe esse objeto para UIApplicationo openURLmétodo s : para abrir seu item na App Store.

Código de amostra:

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.
fonte
161
Uma dica é usar itms: // em vez de http: //, e ele será aberto diretamente na loja de aplicativos. No iPhone, ele faz 2 (!) Redirecionamentos ao usar http e 1 ao usar itms. Ao usar os links phobos mais antigos (veja acima), existem 0 redirecionamentos. Use o ID do iTunes Connect se estiver usando links phobos. Você pode optar por enviar um aplicativo sem incluir o binário. Dessa forma, você obterá o ID antes de enviar o binário real. Eu não tentei isso, mas ouvi dizer que funciona.
Quano 14/03
11
Veja: developer.apple.com/library/ios/#qa/qa1633/_index.html (espaço branco deve apenas ser removido.)
Nathan S.
8
Exceto ... qual é o valor correto a ser usado appname? É o "Nome para exibição do pacote" do aplicativo? Não diferencia maiúsculas de minúsculas? Como são tratados os espaços em branco, etc.?
aroth 23/09
14
Isso deve ser testado em um dispositivo real.
Protocole
7
Isso DEVE ser testado em um dispositivo real, sim! Eu lutei com nada acontecendo por cerca de uma hora antes de conectar o iPad e testá-lo lá. Geh.
Kalle
361

Se você deseja abrir um aplicativo diretamente na App Store, use:

itms-apps: // ...

Dessa forma, ele abrirá diretamente o aplicativo da App Store no dispositivo, em vez de ir primeiro ao iTunes, depois abra apenas a App Store (ao usar apenas itms: //)

Espero que ajude.


Edição: abril de 2017. itms-apps: // realmente funciona novamente no iOS10. Eu testei.

EDIT: APR, 2013. Isso não funciona mais no iOS5 e acima. Apenas use

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

e não há mais redirecionamentos.

GeneCode
fonte
2
@PEZ A partir de hoje, estou vendo dois redirecionamentos ao usar http: // ... A resposta funciona perfeitamente para mim - itms-apps: // ... abre diretamente o aplicativo App Store no dispositivo, sem redirecionamentos.
Josh Brown
4
Rocotilos, você tem certeza de que isso não funciona mais? Você pode postar um link?
Johndodo 19/05
8
No iOS. itmsabre o itunes. enquanto itms-appsabre a App Store. Essa é a principal diferença se for solicitado que os usuários atualizem! (iOS 10)
mcm
2
itms-appsabre o aplicativo da App Store para mim via openURL:iOS 10.2. Parece não haver problema.
Pkamb #
1
Desde a versão 10.3, esse método funciona, mas ele precisa passar por um pop-up de exibição intermediário 'abrir este URL na loja de aplicativos'? Referência: blog.branch.io/…
gabry
51

A partir do iOS 6, o caminho certo para fazer isso usando a classe 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")

Você pode obter o identificador de item do iTunes do aplicativo assim: (em vez de um estático)

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

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

Você pode obter kAppITunesItemIdentifier(identificador de item do itunes do aplicativo) assim: (em vez de um estático)

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]];
Ramis
fonte
4
em rápida não se esqueça de importar e delegado: RateMeViewController classe importação StoreKit: UIViewController, SKStoreProductViewControllerDelegate {
djdance
Isso ainda funciona, no entanto, quando você clica em Escrever uma crítica, não funciona. Você precisa clicar no botão Store no canto superior e clicar em Write a Review. Alguém conhece uma solução alternativa?
socca1157
"Escrever uma crítica" tenta abrir outro modal e falha, provavelmente porque você já está apresentando no modal. Mas a Apple o força. Parece que não há uma maneira adequada de fazer as revisões funcionarem. anulando todo esse conceito.
AmitP
Esse json nem sempre retorna dados e retorna contagem zero às vezes. Não é confiável para obter o ID do aplicativo antes do envio.
Amber K
41

Para o verão de 2015 em diante ...

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

substitua 'id1234567890' por 'id' e 'seu número de dez dígitos'

  1. Isso funciona perfeitamente em todos os dispositivos .

  2. Ele vai direto para a loja de aplicativos, sem redirecionamentos.

  3. Está OK para todas as lojas nacionais .

  4. É verdade que você deve usar loadProductWithParameters , mas se o objetivo do link é atualizar o aplicativo em que você realmente está: é possivelmente melhor usar essa abordagem "antiquada".

Joe Blow
fonte
Além disso, para direcionar para a página do desenvolvedor (se você quiser mostrar ao usuário o seu catálogo de aplicativos), você pode usar: NSString * simple = @ "itms-apps: //itunes.com/apps/YOUR_COMPANY_NAME";
TheBestBigAl
2
Onde encontro esse ID?
Mcfly soft
1
Verão de 2015 ?! Como se o mundo inteiro morasse no mesmo país. :(
nacho4d 11/09/18
39

A Apple acaba de anunciar os URLs do appstore.com.

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

Existem três tipos de Links curtos da App Store, de duas formas, uma para aplicativos iOS e outra para aplicativos Mac:

Nome da empresa

iOS: http://appstore.com/ por exemplo, http://appstore.com/apple

Mac: http://appstore.com/mac/, por exemplo, http://appstore.com/mac/apple

Nome do aplicativo

iOS: http://appstore.com/ por exemplo, http://appstore.com/keynote

Mac: http://appstore.com/mac/, por exemplo, http://appstore.com/mac/keynote

App por Empresa

iOS: http://appstore.com/ / por exemplo, http://appstore.com/apple/keynote

Mac: http://appstore.com/mac/ / por exemplo, http://appstore.com/mac/apple/keynote

A maioria das empresas e aplicativos possui um link curto canônico da App Store. Esse URL canônico é criado alterando ou removendo determinados caracteres (muitos dos quais são ilegais ou têm significado especial em um URL (por exemplo, "&")).

Para criar um link curto da App Store, aplique as seguintes regras ao nome da sua empresa ou aplicativo:

Remova todo o espaço em branco

Converter todos os caracteres em minúsculas

Remova todos os símbolos de direitos autorais (©), marca comercial (™) e marca registrada (®)

Substitua e comercial ("&") por "e"

Remova a maior pontuação (consulte a Listagem 2 para o conjunto)

Substitua caracteres acentuados e outros caracteres "decorados" (ü, å, etc.) pelo caractere elementar (u, a, etc.)

Deixe todos os outros caracteres como estão.

Listagem 2 Caracteres de pontuação que devem ser removidos.

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

Abaixo estão alguns exemplos para demonstrar a conversão que ocorre.

Loja de aplicativos

Exemplos de nomes de empresas

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

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

Fotografia e Software de Chen => http://appstore.com/chensphotographyandsoftware

Exemplos de nomes de aplicativos

Ocarina => http://appstore.com/ocarina

Onde está o meu Perry? => http://appstore.com/wheresmyperry

Desafio Cerebral ™ => http://appstore.com/brainchallenge

Dev01
fonte
1
esta é realmente a única coisa que ainda funciona confiável para armazenamento de mac, pelo menos
Radu Simionescu
É bom saber sobre isso, mas infelizmente no iOS isso é redirecionado pelo Safari (e fornece uma mensagem feia "Não é possível verificar a identidade do servidor").
sudo make install
NÃO. Leia isto - "Esses links curtos da App Store são fornecidos por conveniência e não garantem um link para um aplicativo ou empresa em particular". Então, basicamente, é dado aleatoriamente.
durazno
30

Este código gera o link da App Store no iOS

NSString *appName = [NSString stringWithString:[[[NSBundle mainBundle] infoDictionary]   objectForKey:@"CFBundleName"]];
NSURL *appStoreURL = [NSURL URLWithString:[NSString stringWithFormat:@"itms-apps://itunes.com/app/%@",[appName stringByReplacingOccurrencesOfString:@" " withString:@""]]];

Substitua itms-apps por http no Mac:

NSURL *appStoreURL = [NSURL URLWithString:[NSString stringWithFormat:@"http:/itunes.com/app/%@",[appName stringByReplacingOccurrencesOfString:@" " withString:@""]]]; 

URL aberto no iOS:

[[UIApplication sharedApplication] openURL:appStoreURL];

Mac:

[[NSWorkspace sharedWorkspace] openURL:appStoreURL];
Tibidabo
fonte
Isso funciona, mas você também precisa remover caracteres especiais como traços do nome do aplicativo.
Macondo2Seattle
Obrigado @ 3 revs e @BlackRider
Ganesh Guturi
Podemos abrir e mostrar todos os aplicativos enviados pelo desenvolvedor em uma página?
22814 Imran
Essa foi a única solução drop-in que funcionou para mim com redirecionamentos mínimos e manipulação máxima do espaço em branco do nome do aplicativo.
LordParsley
29

Para ter um link direto sem redirecionamento:

  1. Use o link maker do iTunes http://itunes.apple.com/linkmaker/ para obter o link direto real
  2. Substitua o http://poritms-apps://
  3. Abra o link com [[UIApplication sharedApplication] openURL:url];

Cuidado, esses links funcionam apenas em dispositivos reais, não no simulador.

Fonte: https://developer.apple.com/library/ios/#qa/qa2008/qa1629.html

dulgan
fonte
3
+1 em itunes.apple.com/linkmaker, todo mundo testa o link no dispositivo e não no simulador, eu estava perdendo tempo no teste do simulador.
karthik
2
Obrigado por informações sobre Simulator, vou acrescentar esta a resposta
dulgan
18

Isso funcionou para mim perfeitamente usando apenas o APP ID:

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

O número de redirecionamentos é ZERO.

Almas Adilbek
fonte
13

Várias respostas sugerem o uso de 'itms' ou 'itms-apps', mas essa prática não é especificamente recomendada pela Apple. Eles oferecem apenas a seguinte maneira de abrir a App Store:

Listagem 1 Iniciando a App Store a partir de um aplicativo iOS

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

Consulte https://developer.apple.com/library/ios/qa/qa1629/_index.html última atualização em março de 2014 a partir desta resposta.

Para aplicativos compatíveis com iOS 6 e superior, a Apple oferece um mecanismo no aplicativo para apresentar a 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
}];

Observe que no iOS6, o bloco de conclusão pode não ser chamado se houver erros. Parece ser um bug que foi resolvido no iOS 7.

Ben Flynn
fonte
12

Se você deseja vincular aos aplicativos de um desenvolvedor e o nome do desenvolvedor tiver pontuação ou espaços (por exemplo, Development Company, LLC), forme seu URL da seguinte maneira:

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

Caso contrário, ele retornará "Esta solicitação não pode ser processada" no iOS 4.3.3

Andrew
fonte
1
Se isso não funcionar, tente a seguinte sintaxe: itms-apps: //itunes.com/apps/ChuckSmith/id290402113 substituindo meu nome pela sua empresa e meu ID pelo seu ID de artista, que você pode obter no link do iTunes Criador: itunes.apple.com/linkmaker
Chuck Smith
Você também pode tentar codificar esses caracteres "especiais" - ou seja, substituir "." com "% 2E"
wzs 7/03/12
essa é a resposta perfeita!
Sam B
11

Você pode obter um link para um item específico na loja de aplicativos ou iTunes através do criador de links em: http://itunes.apple.com/linkmaker/

Octavio Berlanga
fonte
Este me ajudou, porque o link no meu itunes-connect não funcionou, e no gerador ele funciona. obrigado
Dorad
9

Isso está funcionando e vinculando diretamente no ios5

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

É uma maneira simples e curta de redirecionar / vincular outro aplicativo existente na loja de aplicativos.

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

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

Para o Xcode 9.1 e Swift 4:

  1. Importar StoreKit:
import StoreKit

2.Conforme o protocolo

SKStoreProductViewControllerDelegate

3.Implemente o protocolo

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. Como usar:
openStoreProductWithiTunesItemIdentifier(identifier: "here_put_your_App_id")

Nota:

É muito importante inserir o ID exato do seu aplicativo. Porque isso causa erro (não mostra o log de erros, mas nada funciona bem por causa disso)

xhinoda
fonte
1
Estou fazendo a mesma coisa, rodando no dispositivo. Sem sucesso
Andrea Mugnaini
4

Posso confirmar que, se você criar um aplicativo no iTunes connect, receberá seu ID do aplicativo antes de enviá-lo.

Portanto..

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

Funciona um tratamento

user1641587
fonte
4

Criar um link pode se tornar um problema complexo ao oferecer suporte a vários sistemas operacionais e plataformas múltiplas. Por exemplo, os WebObjects não são compatíveis com o iOS 7 (alguns deles), alguns links criados por você abririam outra loja de país, em seguida a do usuário etc.

Existe uma biblioteca de código aberto chamada iLink que pode ajudá-lo.

A vantagem desta biblioteca é que os links seriam encontrados e criados em tempo de execução (a biblioteca verificaria o ID do aplicativo e o sistema operacional em que está sendo executado e descobriria qual link deveria ser criado). O melhor ponto é que você não precisa configurar quase nada antes de usá-lo, para que fique livre de erros e funcione sempre. Isso também é ótimo se você tiver poucos destinos no mesmo projeto para não precisar se lembrar de qual ID ou link do aplicativo usar. Essa biblioteca também solicitaria que o usuário atualizasse o aplicativo se houver uma nova versão na loja (isso é incorporado e você o desativa com um simples sinalizador) apontando diretamente para a página de atualização do aplicativo, se o usuário concordar.

Copie os 2 arquivos de biblioteca para o seu projeto (iLink.h e iLink.m).

No seu 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.
}

e no local em que você deseja abrir a página de classificação, por exemplo, basta usar:

[[iLink sharedInstance] iLinkOpenAppPageInAppStoreWithAppleID: YOUR_PAID_APP_APPLE_ID]; // You should find YOUR_PAID_APP_APPLE_ID from iTunes Connect 

Não se esqueça de importar o iLink.h no mesmo arquivo.

Há um documento muito bom para toda a biblioteca e um exemplo de projetos para iPhone e Mac.

Jameson
fonte
4

Pelo menos iOS 9 e superior

  • Abrir diretamente na App Store

Um aplicativo

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

Lista de aplicativos do desenvolvedor

itms-apps://itunes.apple.com/developer/[developerName]/[developerID]
Jakub Truhlář
fonte
appNamenão é necessário.
precisa saber é o seguinte
4

De acordo com o último documento da Apple, você precisa usar

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

ou

SKStoreProductViewController 
Mihir Oza
fonte
Você pode atualizar seu link, por favor? Isso parece bastante interessante se isso não funcionar.
Rémy Virin
O documento vinculado não menciona itms:ou itms-apps:. Links usando essa multa regime de trabalho em meus dispositivos que executam o iOS 12.
Theo
4

Apesar de haver muitas respostas aqui, nenhuma das sugestões para vincular aos aplicativos de desenvolvedores parece funcionar mais.

Quando visitei pela última vez, consegui fazê-lo funcionar usando o formato:

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

Isso não funciona mais, mas a remoção do nome do desenvolvedor:

itms-apps://itunes.apple.com/developer/id123456789
Leon
fonte
3

Se você tem o ID da loja de aplicativos, é melhor usá-lo. Especialmente se você no futuro alterar o nome do aplicativo.

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

Se você não tiver o ID da loja de aplicativos, poderá criar um URL com base nesta documentação 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;
}

Passa neste teste

- (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
fonte
3

Todas as respostas estão desatualizadas e não funcionam; use o método abaixo.

Todos os aplicativos de um desenvolvedor:
itms-apps://apps.apple.com/developer/developer-name/developerId

Aplicativo único:
itms-apps://itunes.apple.com/app/appId

Karen Karapetyan
fonte
1

ele abrirá a App Store diretamente

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

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];
Biswajit Banik
fonte
0

Tente desta maneira

http://itunes.apple.com/lookup?id= "seu ID do aplicativo aqui" retorna json. A partir disso, encontre a chave " trackViewUrl " e o valor é o URL desejado. use esse URL (basta substituir https://por itms-apps://). Isso funciona muito bem.

Por exemplo, se o ID do seu aplicativo for xyz, acesse este link http://itunes.apple.com/lookup?id=xyz

Em seguida, encontre o URL da chave " trackViewUrl ". Este é o URL do seu aplicativo na loja de aplicativos e, para usar esse URL no xcode, tente isso

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

obrigado

Tunvir Rahman Tusher
fonte