Como ligar às aplicações na loja de aplicações
estou a criar uma versão gratuita do meu jogo para iPhone. Eu quero ter um botão dentro da versão gratuita que leva as pessoas para a versão paga na app store. Se eu usar uma ligação padrão
Http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=300136119&mt=8
o iPhone Abre o Safari primeiro, e depois a app store. Eu usei outros aplicativos que abrem a app store diretamente, então eu sei que é possível.
Alguma ideia? Qual é o URL Esquema para a app store?25 answers
Editado em 2016-02-02
A partir de iOS 6 foi introduzida a classe Skstore Productviewcontroller. Você pode ligar um aplicativo sem deixar o seu aplicativo. Excerto de código em Swift 3.x / 2.x e Objective-C is here .Ao objecto Skstore Productviewcontroller apresenta uma loja que permite ao Usuário para comprar outros meios de comunicação da App Store. Por exemplo, a sua aplicação poderá mostrar a loja para permitir ao utilizador compra outra aplicação.
From News and Announcement For Apple Developers .
Dirija os clientes directamente para a sua aplicação na App Store com Links do iTunes Com iTunes links você pode fornecer o seu clientes com uma maneira fácil de acessar as suas aplicações na Loja de aplicações directamente a partir do seu site ou marketing campanha. Criar um link do iTunes é simples e pode ser feito para dirigir clientes para um único aplicativo, tudo os seus aplicativos, ou para um aplicativo específico com sua nome da empresa indicado.
Enviar clientes para um determinado aplicacao: 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 ENDERECO: http://itunes.com/apps/developername/appname
Notas complementares:
Pode substituir http://
por itms://
ou itms-apps://
para evitar redirecções.
Por favor, note que itms://
irá enviar o utilizador para a iTunes store e itms-apps://
Com enviar para a App Store!
Https://developer.apple.com/library/content/qa/qa1633/_index.html.
Editar (a partir de janeiro 2015):
Itunes.com/apps links devem ser atualizados para appstore.com/apps ver QA1633 acima, que foi actualizado. Nova QA1629 sugere estes passos e o código para lançar a loja a partir de um aplicativo:
-
Lança o iTunes no teu computador.
- procura o item para o qual queres ligar.
- Clique com o botão direito ou controle-clique no nome do item no iTunes, em seguida, escolha "Copiar o URL do iTunes Store" do menu de contexto.
- na sua aplicação, crie um objecto
NSURL
com o URL do iTunes copiado, depois passe este objecto paraUIApplication
' sopenURL
: método para abrir o seu item na aplicação Armazenar.
Código da amostra:
NSString *iTunesLink = @"itms://itunes.apple.com/app/apple-store/id375380948?mt=8";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];
IOS10+:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink] options:@{} completionHandler:nil];
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)!)
}
Se quiser abrir uma aplicação directamente no App Store, deve usar:
Itms-apps://...
Desta forma, irá abrir directamente a aplicação App Store no dispositivo, em vez de ir ao iTunes primeiro, e só depois abrir a App Store (quando usar apenas itms://)
Espero que isso ajude.EDIT: ABR, 2017. itms-apps: / / realmente funciona novamente no iOS10. Eu testei-o.
EDITAR: ABR, 2013. Isto não funciona mais em iOS5 e acima. Basta usar
https://itunes.apple.com/app/id378458261
E ali não há mais redirecções.
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 do item itunes da aplicação 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")
Objectivo-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 {[[6]} (app é item itunes identificador) 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]];
Https://developer.apple.com/library/ios/qa/qa1633/_index.html
Existem três tipos de ligações curtas de App Store, em duas formas, uma para aplicações iOS, outra para aplicações 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 Da Aplicação
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 aplicações têm um Link de armazenamento de App canónico. Este URL canônico é criado alterando ou removendo certos caracteres (muitos dos quais são ilegais ou têm significado especial em um URL (por exemplo, "&")).
Para criar uma ligação curta App Store, Aplique as seguintes regras à sua empresa ou nome da aplicação:
Remover todos os espaços em branco
Converter todos os caracteres para minúsculas
Remover todos os símbolos dos direitos de autor ( © ), da marca ( ™ ) e da marca registada ( ® )
Substituir os amplificadores ( " & ") por " e "
Remover A maior parte da pontuação (Ver Lista 2 para o conjunto)
Substituir caracteres acentuados e outros "decorados" (ü, å, etc.) com seu caráter elementar (u, a, etc.)
Deixe todos os outros personagens como estão.Listando 2 caracteres de pontuação que devem ser removidos.
!¡"#$%'()*+,-./:;¿?@[]^_`{|}~
Abaixo estão alguns exemplos para demonstrar a conversão que ocorre.
App Store
Nome da empresa exemplos
Gameloft => http://appstore.com/gameloft
Activision Publishing, Inc. = > http://appstore.com/activisionpublishingincFotografia e Software de Chen = > http://appstore.com/chensphotographyandsoftware
Exemplos de nomes de aplicações
Ocarina => http://appstore.com/ocarina
Onde está o meu Perry? = > http://appstore.com/wheresmyperry [[1]}Brain Challenge™ = > http://appstore.com/brainchallenge
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]];
}
Substituir "id1234567890" por " id " e "o seu número de dez algarismos"
-
Isto funciona perfeitamente em todos os dispositivos.
- Vai directamente para a app store, sem redirecções.
-
Está tudo bem para todas as lojas nacionais.
-
É verdade que deves passar a usar
loadProductWithParameters
, Mas Se o propósito do link é atualizar o aplicativo você é realmente dentro de: é possivelmente melhor usar esta abordagem "antiquada".
Ter uma ligação directa sem redireccionamento:
- Use o fabricante de ligações do iTunes http://itunes.apple.com/linkmaker/ para obter a ligação directa real
- substituir o
http://
poritms-apps://
- Abra a ligação com
[[UIApplication sharedApplication] openURL:url];
Fonte : https://developer.apple.com/library/ios/#qa/qa2008/qa1629.html
Este código gera a Ligação 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:@""]]];
Abrir o URL no iOS:
[[UIApplication sharedApplication] openURL:appStoreURL];
Mac:
[[NSWorkspace sharedWorkspace] openURL:appStoreURL];
Http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=300136119&mt=8
Agora vai abrir o App Store directamente 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.
Algumas respostas sugerem a utilização de 'itms ' ou' itms-apps', mas esta prática não é especificamente recomendada pela Apple. Eles só oferecem a seguinte maneira de abrir a App Store:
Lista 1 lançamento da App Store a partir de uma aplicação iOS
NSString *iTunesLink = @"https://itunes.apple.com/us/app/apple-store/id375380948?mt=8";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];
Ver https://developer.apple.com/library/ios/qa/qa1629/_index.html última actualização de Março de 2014 a partir desta resposta.
Para aplicações que suportam iOS 6 ou mais, a Apple oferece um mecanismo in-app para apresentar o 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 no iOS6, o bloco de completação pode não ser chamado se houver erros. Este parece ser um bug que foi resolvido no iOS 7.
Se quiser ligar-se às aplicações de um programador e o nome do programador tiver pontuação ou espaços (por exemplo, Empresa de desenvolvimento, LLC), forme o seu URL como este:
itms-apps://itunes.com/apps/DevelopmentCompanyLLC
Caso contrário devolve "este pedido não pode ser processado" em iOS 4.3.3
Você pode obter um link para um item específico na app store ou iTunes através do fabricante de link em: http://itunes.apple.com/linkmaker/
NSString *iTunesLink = @"http://itunes.apple.com/app/baseball-stats-tracker-touch/id490256272?mt=8";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];
Esta é uma forma simples e curta de redireccionar/ligar outra aplicação existente no app store.
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:
- Import StoreKit:
import StoreKit
2.Em conformidade com o protocolo
SKStoreProductViewControllerDelegate
3.Aplicar 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)
}
- Como Utilizar:
openStoreProductWithiTunesItemIdentifier(identifier: "here_put_your_App_id")
Nota:
É muito importante inserir o ID exato do seu aplicativo. Porque esta causa erro (não mostrar o registro de erro, mas nada funciona bem por causa disso)
Todas as respostas estão desactualizadas e não funcionam; use o método abaixo.
Todas as aplicações de um programador:itms-apps://apps.apple.com/developer/developer-name/developerId
Aplicação única:itms-apps://itunes.apple.com/app/appId
Posso confirmar que se criar uma aplicação no iTunes connect, terá o seu ID da aplicação antes de o submeter.
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 como um tratamento
Existe uma biblioteca de código aberto chamada iLink que pode ajudar-te.
Existem vantagens desta Biblioteca é que as ligações seriam encontradas e criadas no tempo de execução (a biblioteca iria verificar o ID da aplicação e o SO ele está funcionando e iria descobrir que link deve ser criado). O melhor ponto nisto é que você não precisa configurar quase nada antes de usá-lo para que seja livre de erros e funcionaria sempre. Isso é ótimo também se você tem poucos alvos no mesmo projeto para que você não tem que se lembrar que id app ou link para usar. Esta biblioteca também pediria ao utilizador para actualizar a aplicação se houvesse uma nova versão na loja (esta é incorporada e você desliga - a com uma bandeira simples) que apontasse directamente para a página de atualização para o aplicativo, se o usuário concordar.
Copie os 2 ficheiros da biblioteca para o seu projecto (iLink.h & 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 onde quer abrir a página de classificação, por exemplo, use apenas:
[[iLink sharedInstance] iLinkOpenAppPageInAppStoreWithAppleID: YOUR_PAID_APP_APPLE_ID]; // You should find YOUR_PAID_APP_APPLE_ID from iTunes Connect
Não te esqueças de importar a iLink.h no mesmo ficheiro.
Há um doc muito bom para toda a biblioteca lá e um exemplo de projetos para iPhone e para Mac.
Pelo menos iOS 9 ou superior
- abrir directamente no App Store
Uma aplicação
itms-apps://itunes.apple.com/app/[appName]/[appID]
Lista das aplicações dos programadores
itms-apps://itunes.apple.com/developer/[developerName]/[developerID]
De acordo com o último documento da Apple Tem de utilizar
appStoreLink = "https://itunes.apple.com/us/app/apple-store/id375380948?mt=8"
Ou
SKStoreProductViewController
Apesar de haver muitas respostas aqui, nenhuma das sugestões para ligar aos aplicativos de desenvolvedores parece funcionar mais.
Quando a visitei pela última vez, consegui pô-la a funcionar com o formato:
itms-apps://itunes.apple.com/developer/developer-name/id123456789
Isto já não funciona, mas remover o nome do programador faz:
itms-apps://itunes.apple.com/developer/id123456789
Acho que a Apple forneceu um novo link para a ligação da aplicação.: https://apps.apple.com/app/id1445530088 ou https://apps.apple.com/app/ {your_app_id}
Se TEM o ID da app store, é melhor usá-lo. Especialmente se você no futuro pode mudar o nome da aplicação.
http://itunes.apple.com/app/id378458261
Se não tiver o id da app store, poderá criar um url baseado 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);
}
Abrirá o App Store directamente
NSString *iTunesLink = @"itms-apps://itunes.apple.com/app/ebl-
skybanking/id1171655193?mt=8";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];
Tenta por aqui
Por exemplo, se o seu ID da aplicação for xyz, vá para esta ligação http://itunes.apple.com/lookup?id=xyz
Depois encontra o url da chave " trackViewUrl ".Este é o url para o seu aplicativo na app store e para usar este url em Xcode tente 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]];
Obrigado.