Como conectar-se a aplicativos na App Store
-
10-07-2019 - |
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?
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:
- iTunes iniciado no computador.
- Procure o item que você deseja vincular.
- 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.
- Em seu aplicativo, crie um objeto
NSURL
com o iTunes URL copiado, em seguida, passar esse objeto paraUIApplication
' sopenURL
:. 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'
-
Isso funciona perfeitamente em todos os dispositivos .
-
Ele não ir direto para A App Store, sem redirecionamentos.
-
é OK para todos os lojas nacionais .
-
É 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:
- Use o iTunes ligação fabricante http://itunes.apple.com/linkmaker/ para obter o verdadeira ligação directa ??li>
- Substitua o
http://
comitms-apps://
- 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:
- 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)
}
- 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