Pergunta

Estou criando uma versão gratuita do meu jogo iPhone. Eu quero ter um botão dentro da versão gratuita que leva as pessoas para a 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 Safari primeiro, e depois a loja de aplicativos. Eu tenho usado outros aplicativos que abrem a loja de aplicativos diretamente, então eu sei que é possível.

Todas as idéias? Qual é o esquema de URL para a App Store?

Foi útil?

Solução

Editado em 2016/02/02

A partir de iOS 6 SKStoreProductViewController classe foi introduzido. É possível vincular um aplicativo sem sair do seu aplicativo. Trecho de código em Swift 3.x / 2.x e Objective-C é aqui .

A SKStoreProductViewController objeto apresenta uma loja que permite que o usuário a comprar outros meios de comunicação a partir da App Store. Por exemplo, seu aplicativo pode exibir a loja para permitir que o usuário a comprar outro aplicativo.


A partir Notícias e anúncio Para a Apple Developers .

levar os clientes diretamente para o seu App na App Store com o iTunes Ligações Com o iTunes links que você pode fornecer a sua clientes com uma maneira fácil de acesso seus aplicativos na App Store diretamente a partir de seu site ou comercialização campanhas. Criando uma ligação iTunes é simples e pode ser feito para dirigir clientes, quer um único aplicativo, todos seus aplicativos, ou para um aplicativo específico com o nome da empresa especificado.

Para enviar clientes para uma específica inscrição: http://itunes.com/apps/appname

Enviar para clientes a 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 empresa incluído no URL: http://itunes.com/apps/developername/appname


Notas adicionais:

Você pode substituir http:// com itms:// ou itms-apps:// para redirecionamentos Evitar.

Para informações sobre nomeação, ver a Apple QA1633:

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

Editar (a partir de Janeiro de 2015):

itunes.com/apps ligações devem ser atualizados para appstore.com/apps. Veja QA1633 acima, que foi atualizado. Um novo QA1629 sugere estes passos e código para lançar a loja a partir de um app:

  1. iTunes iniciado no computador.
  2. Procure o item que você deseja vincular.
  3. botão direito do mouse ou controle clique sobre o nome do item no iTunes, em seguida, escolha "Copiar iTunes Store URL" no menu pop-up.
  4. Em seu aplicativo, crie um objeto NSURL com o iTunes URL copiado, em seguida, passar esse objeto para UIApplication' s openURL:. Método para abrir o item na App Store

Exemplo de código:

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

Outras dicas

Se você quiser abrir um aplicativo diretamente para a App Store, você deve usar:

itms-apps: // ...

Desta forma, ele vai abrir diretamente o aplicativo App Store no dispositivo, em vez de ir para o iTunes em primeiro lugar, só então abrir a App Store (quando se utiliza apenas ITMS: //)

Espero que ajude.


EDIT: abril de 2017. ITMS-apps: // realmente funciona novamente em iOS10. Eu testei-o.

EDIT: abril de 2013. Isso não funciona mais em iOS5 e acima. usar apenas

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

e não há mais redirecionamentos.

A partir de iOS 6 caminho certo para fazê-lo usando SKStoreProductViewController classe.

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 do item itunes do aplicativo como este: (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")

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

Você pode obter kAppITunesItemIdentifier (identificador de item itunes do app) como este: (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]];

Para o verão 2015 ...

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

substituir 'id1234567890' com 'id' e 'o seu número de dígitos ten'

  1. Isso funciona perfeitamente em todos os dispositivos .

  2. Ele não ir direto para A App Store, sem redirecionamentos.

  3. é OK para todos os lojas nacionais .

  4. É verdade que você deve movimento para usando loadProductWithParameters, e se a finalidade do link é atualizar o aplicativo que você está realmente dentro de: é possivelmente melhor usar essa abordagem "à moda antiga".

Apple acaba de anunciar a appstore.com urls.

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

Existem três tipos de App Store Curto Links, em duas formas, uma para aplicativos iOS, outra para Mac Apps:

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

App Nome

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

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

App pela 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 têm uma canônica App Store link Short. Este URL canônica é criado, alterando ou removendo certas personagens (muitos dos quais são ilegais ou têm um significado especial em uma URL (por exemplo, "&")).

Para criar um link App Store Curto, aplicar as seguintes regras para sua empresa ou aplicativo nome:

Remova todos os espaços

Converter todos os caracteres para minúsculas

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

Substituir comercial ( "&") com "e"

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

Substituir acentuados e outros "decorado" caracteres (U, A, etc.), com seu caráter elementar (u, a, etc.)

Deixe todas as outras personagens como está.

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

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

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

App Store

exemplos Nome da Empresa

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

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

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

exemplos App Nome

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

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

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

Este código gera o link 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:@""]]];

Substituir ITMS-apps com http no Mac:

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

Open URL no iOS:

[[UIApplication sharedApplication] openURL:appStoreURL];

Mac:

[[NSWorkspace sharedWorkspace] openURL:appStoreURL];

Simplesmente mudar 'itunes' para 'phobos' no link do aplicativo.

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

Agora, ele vai abrir a App Store diretamente

Para ter um link direto sem redirecionamento:

  1. Use o iTunes ligação fabricante http://itunes.apple.com/linkmaker/ para obter o verdadeira ligação directa
  2. Substitua o http:// com itms-apps://
  3. Abra o link com [[UIApplication sharedApplication] openURL:url];

Tenha cuidado, esses links só funciona em dispositivos reais, não em simulador.

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

Isso funcionou para mim perfeitamente usando apenas 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.

Um número de respostas sugerir o uso de 'itms' ou 'ITMS-apps', mas esta prática não é recomendado especificamente pela Apple. Eles só oferecem a seguinte maneira de abrir a App Store:

Listagem 1 O lançamento da 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]];

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

Para aplicativos que iOS apoio 6 e superiores, a Apple oferece um mecanismo in-app 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
}];

Note que em iOS6, o bloco de conclusão não pode ser chamado se houver erros. Este parece ser um bug que foi resolvido em iOS 7.

Se você quiser link para aplicativos de um desenvolvedor e o nome do desenvolvedor tem pontuação ou espaços (por exemplo Development Company, LLC) formar o seu URL como esta:

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

Caso contrário, ele retorna "Este pedido não pode ser processado" no iOS 4.3.3

Você pode obter um link para um item específico na App Store ou o iTunes, através do link fabricante em: http://itunes.apple.com/linkmaker/

Esta é trabalhar e directamente ligando em ios5

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

Esta é a maneira simples e curto para redirecionamento / ligar outra aplicação 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]];
 } 

Para Xcode 9.1 e Swift 4:

  1. Import StoreKit:
import StoreKit

2.Conform o protocolo

SKStoreProductViewControllerDelegate

3.Implementar 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 para entrar no ID exacto da sua APP. Porque este erro causa (não mostrar o log de erro, mas nada funciona bem por causa disso)

Eu posso confirmar que se você criar um aplicativo no iTunes conectar você começa o seu ID de aplicativo antes de enviá-lo.

Por isso ..

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

A criação de um link pode se tornar uma questão complexa no apoio a múltiplos sistemas operacionais e plataformas múltiplas. Por exemplo, os WebObjects não é compatível com iOS 7 (alguns deles), alguns links criados iria abrir outra loja de país depois do usuário etc.

Há uma biblioteca de código aberto chamado iLink que poderia ajudá-lo.

Há vantagens desta biblioteca é que as ligações seriam encontrados e criados em tempo de execução (a biblioteca iria verificar o ID do aplicativo e do sistema operacional que está sendo executado em e iria descobrir o link deve ser criada). O melhor ponto neste processo é que você não precisa configurar quase tudo antes de usá-lo de modo que é livre de erros e iria trabalhar sempre. Isso é ótimo também se você tem alguns alvos no mesmo projeto para que você não tem que lembrar que ID do aplicativo ou link para o uso. Esta biblioteca também solicitar ao usuário para atualizar o aplicativo se há uma nova versão na loja (isto é construído em e você desligar isso por uma bandeira simples) apontando diretamente para a página de atualização para o aplicativo se o usuário concorda.

Copiar os 2 arquivos de biblioteca para o seu projeto (iLink.h & iLink.m).

Em 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 lugar que você quer 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 iLink.h no mesmo arquivo.

Há um muito bom doc para toda a biblioteca de lá e um exemplo projectos para o iPhone e para Mac.

Pelo menos iOS 9 e acima

  • Open diretamente na App Store

Um aplicativo

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

Lista de desenvolvedor é apps

itms-apps://itunes.apple.com/developer/[developerName]/[developerID]

De acordo com a último documento da Apple Você precisa usar

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

ou

SKStoreProductViewController 

Se você tem o ID de loja de aplicativos que você é melhor fora de usá-lo. Especialmente se você no futuro pode mudar o nome do aplicativo.

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

Se você não tem tha ID App Store você pode criar uma 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;
}

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

Apesar de haver cargas de respostas aqui, nenhuma das sugestões de links para os desenvolvedores de aplicativos parecem funcionar mais.

Quando eu última visita eu era capaz de fazê-lo funcionar usando o formato:

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

Isto já não funciona, mas removendo o nome do desenvolvedor faz:

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

Tente este caminho

http://itunes.apple.com/lookup?id= "seu aplicativo ID aqui" json.From retornar isso, encontrar a chave " trackViewUrl " eo valor é a URL desejada. usar este url (basta substituir https:// com itms-apps://) .Esta funciona muito bem.

Por exemplo, se o seu ID do aplicativo é xyz, em seguida, ir a este link http://itunes.apple.com/lookup?id=xyz

Em seguida, encontrar a url para a chave " trackViewUrl ". Esta é a URL para seu aplicativo na App Store e usar essa url no Xcode tentar este

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

Graças

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top