Cómo vincular a las apps en la app store
-
10-07-2019 - |
Pregunta
Estoy creando una versión gratuita de mi juego de iPhone.Quiero tener un botón en el interior de la versión gratuita que lleva a la gente a la versión de pago en la app store.Si yo uso un enlace estándar
http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=300136119&mt=8
el iPhone abre Safari en primer lugar, y luego la app store.He usado otras apps que abrir la app store directamente, así que sé que es posible.
Alguna idea?¿Cuál es el Esquema de URL de la app store?
Solución
Editado el 02/02/2016
A partir de iOS 6 SKStoreProductViewController . Puede vincular una aplicación sin salir de su aplicación. El fragmento de código en Swift 3.x / 2.x y Objective-C es aquí .
A SKStoreProductViewController objeto presenta una tienda que permite usuario para comprar otros medios de la tienda de aplicaciones. Por ejemplo, tu aplicación podría mostrar la tienda para permitir al usuario comprar otra aplicación.
De Noticias y anuncios para desarrolladores de Apple .
Dirija a los clientes directamente a su aplicación en la App Store con enlaces de iTunes Con los enlaces de iTunes puedes proporcionar tu clientes con una forma fácil de acceder sus aplicaciones en la App Store directamente desde su sitio web o marketing campañas Crear un enlace de iTunes es simple y se puede hacer para dirigir clientes a una sola aplicación, todas sus aplicaciones o a una aplicación específica con el nombre de su empresa especificado.
Para enviar clientes a un cliente específico solicitud: http://itunes.com/apps/appname
Para enviar clientes a una lista de aplicaciones que tienes en la App Store: http://itunes.com/apps/developername
Para enviar clientes a una aplicación específica con el nombre de su empresa incluido en el URL: http://itunes.com/apps/developername/appname
Notas adicionales:
Puede reemplazar http://
con itms://
o itms-apps://
para evitar redireccionamientos.
Para obtener información sobre nombres, consulte Apple QA1633:
https://developer.apple.com/library/content /qa/qa1633/_index.html .
Editar (a partir de enero de 2015):
Los enlacesitunes.com/apps deben actualizarse a appstore.com/apps. Consulte QA1633 arriba, que se ha actualizado. Un nuevo QA1629 sugiere estos pasos y el código para abrir la tienda desde una aplicación:
- Inicie iTunes en su computadora.
- Busque el elemento al que desea vincular.
- Haga clic con el botón derecho o presione Control y haga clic en el nombre del elemento en iTunes, luego elija " Copiar URL de iTunes Store " desde el menú emergente.
- En su aplicación, cree un objeto
NSURL
con la URL de iTunes copiada, luego pase este objeto aUIApplication
'sopenURL
: método para abrir su elemento en la App Store.
Código de muestra:
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)!)
}
Otros consejos
Si desea abrir una aplicación directamente en la App Store, debe usar:
itms-apps: // ...
De esta manera, abrirá directamente la aplicación App Store en el dispositivo, en lugar de ir a iTunes primero, luego solo abrirá la App Store (cuando use solo itms: //)
Espero que eso ayude.
EDITAR: APR, 2017. itms-apps: // realmente funciona de nuevo en iOS10. Lo probé.
EDITAR: APR, 2013. Esto ya no funciona en iOS5 y superior. Solo usa
https://itunes.apple.com/app/id378458261
y no hay más redirecciones.
Comenzando desde iOS 6 de la manera correcta de hacerlo usando la clase SKStoreProductViewController .
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")
Puede obtener el identificador de elemento de iTunes de la aplicación de esta manera: (en lugar de uno 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];
}
Puede obtener
kAppITunesItemIdentifier
(identificador de elemento de iTunes de la aplicación) de esta manera: (en lugar de uno 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 el verano de 2015 ...
-(IBAction)clickedUpdate
{
NSString *simple = @"itms-apps://itunes.apple.com/app/id1234567890";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:simple]];
}
reemplazar "id1234567890' con 'id' y 'los diez dígitos del número de
Esto funciona perfectamente en todos los dispositivos.
No se directamente a la app store, no redirecciona.
Está bien para todos tiendas nacionales.
Es cierto que debe mover a la utilización de
loadProductWithParameters
, pero si el propósito del enlace es la actualización de la aplicación que son en realidad dentro de:es posiblemente el mejor uso de este "a la antigua" enfoque.
Apple acaba de anunciar las URL de appstore.com.
https://developer.apple.com/library/ios/ qa / qa1633 / _index.html
Existen tres tipos de enlaces cortos de App Store, en dos formas, una para aplicaciones de iOS y otra para aplicaciones de Mac:
Nombre de la empresa
iOS: http://appstore.com/ por ejemplo, http://appstore.com/apple
Mac: http://appstore.com/mac/ por ejemplo, http://appstore.com/mac/apple
Nombre de la aplicación
iOS: http://appstore.com/ por ejemplo, http://appstore.com/keynote
Mac: http://appstore.com/mac/ por ejemplo, http://appstore.com/mac/keynote
Aplicación por empresa
iOS: http://appstore.com/ / por ejemplo, http://appstore.com/apple/keynote
Mac: http://appstore.com/mac/ / por ejemplo, http://appstore.com/mac/apple/keynote
La mayoría de las empresas y aplicaciones tienen un enlace corto canónico de App Store. Esta URL canónica se crea cambiando o eliminando ciertos caracteres (muchos de los cuales son ilegales o tienen un significado especial en una URL (por ejemplo, & Quot; & Amp; & Quot;)).
Para crear un enlace corto de App Store, aplique las siguientes reglas al nombre de su empresa o aplicación:
Eliminar todos los espacios en blanco
Convertir todos los caracteres a minúsculas
Eliminar todos los símbolos de copyright (& # 169;), marca registrada (& # 8482;) y marca registrada (& # 174;)
Reemplace los signos de unión (" & amp; ") con " y "
Eliminar la mayoría de los signos de puntuación (Ver Listado 2 para el conjunto)
Reemplazar acentuado y otros " decorado " caracteres (& # 252 ;, & # 229 ;, etc.) con su carácter elemental (u, a, etc.)
Deje todos los demás caracteres como están.
Listado de 2 caracteres de puntuación que deben eliminarse.
! & # 161; " # $% '() * +, -. / :; < = > & # 191;? @ [] ^ _` {|} ~
A continuación se muestran algunos ejemplos para demostrar la conversión que tiene lugar.
App Store
Ejemplos de nombres de empresas
Gameloft = > http://appstore.com/gameloft
Activision Publishing, Inc. = > http://appstore.com/activisionpublishinginc
Fotografía de Chen & amp; Software = & Gt; http://appstore.com/chensphotographyandsoftware
Ejemplos de nombres de aplicaciones
Ocarina = > http://appstore.com/ocarina
¿Dónde & # 8217; s My Perry? = > http://appstore.com/wheresmyperry
Brain Challenge & # 8482; = > http://appstore.com/brainchallenge
Este código genera el enlace de la App Store en iOS
NSString *appName = [NSString stringWithString:[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleName"]];
NSURL *appStoreURL = [NSURL URLWithString:[NSString stringWithFormat:@"itms-apps://itunes.com/app/%@",[appName stringByReplacingOccurrencesOfString:@" " withString:@""]]];
Reemplace las aplicaciones itms con http en Mac:
NSURL *appStoreURL = [NSURL URLWithString:[NSString stringWithFormat:@"http:/itunes.com/app/%@",[appName stringByReplacingOccurrencesOfString:@" " withString:@""]]];
Abrir URL en iOS:
[[UIApplication sharedApplication] openURL:appStoreURL];
Mac:
[[NSWorkspace sharedWorkspace] openURL:appStoreURL];
Simplemente cambie 'itunes' a 'phobos' en el enlace de la aplicación.
http: // phobos. apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=300136119&mt=8
Ahora abrirá la App Store directamente
Para tener un enlace directo sin redireccionamiento:
- Use iTunes link maker http://itunes.apple.com/linkmaker/ para obtener el enlace directo real
- Reemplace el
http://
conitms-apps://
- Abra el enlace con
[[UIApplication sharedApplication] openURL:url];
Tenga cuidado, esos enlaces solo funcionan en dispositivos reales, no en el simulador.
Fuente: https://developer.apple.com/library /ios/#qa/qa2008/qa1629.html
Esto funcionó perfectamente para mí usando solo la ID de la aplicación:
NSString *urlString = [NSString stringWithFormat:@"http://itunes.apple.com/app/id%@",YOUR_APP_ID];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];
El número de redireccionamientos es CERO.
Varias respuestas sugieren usar 'itms' o 'itms-apps', pero Apple no recomienda específicamente esta práctica. Solo ofrecen la siguiente forma de abrir App Store:
Listado 1 Inicio de la App Store desde una aplicación 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 actualización en marzo de 2014 a partir de esta respuesta.
Para las aplicaciones que admiten iOS 6 y superior, Apple ofrece un mecanismo integrado en la aplicación para presentar la 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
}];
Tenga en cuenta que en iOS6, es posible que no se llame al bloque de finalización si hay errores. Esto parece ser un error que se resolvió en iOS 7.
Si desea vincular a las aplicaciones de un desarrollador y el nombre del desarrollador tiene signos de puntuación o espacios (por ejemplo, Development Company, LLC), forme su URL de esta manera:
itms-apps://itunes.com/apps/DevelopmentCompanyLLC
De lo contrario, devuelve " Esta solicitud no puede procesarse " en iOS 4.3.3
Puede obtener un enlace a un elemento específico en la tienda de aplicaciones o iTunes a través del creador de enlaces en: http://itunes.apple.com/linkmaker/
Esto funciona y se vincula directamente en ios5
NSString *iTunesLink = @"http://itunes.apple.com/app/baseball-stats-tracker-touch/id490256272?mt=8";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];
Esta es una forma simple y corta de redirigir / vincular otra aplicación existente en la tienda de aplicaciones.
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 y Swift 4:
- Importar StoreKit:
import StoreKit
2.Conforme el protocolo
SKStoreProductViewControllerDelegate
3.Implemente el 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)
}
- Cómo usar:
openStoreProductWithiTunesItemIdentifier(identifier: "here_put_your_App_id")
Nota:
Es muy importante ingresar la ID exacta de su aplicación. Porque esto causa un error (no muestra el registro de errores, pero nada funciona bien debido a esto)
Puedo confirmar que si crea una aplicación en iTunes connect, obtiene su identificación de la aplicación antes de enviarla.
Por lo tanto ..
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 un regalo
Crear un enlace podría convertirse en un problema complejo cuando se admiten múltiples sistemas operativos y plataformas múltiples. Por ejemplo, WebObjects no es compatible con iOS 7 (algunos de ellos), algunos enlaces que cree abrirían otra tienda en el país, luego el usuario, etc.
Hay una biblioteca de código abierto llamada iLink que podría ayudarlo.
Las ventajas de esta biblioteca es que los enlaces se encontrarían y crearían en tiempo de ejecución (la biblioteca verificaría el ID de la aplicación y el sistema operativo en el que se está ejecutando y averiguaría qué enlace debería estar creado). El mejor punto en esto es que no necesita configurar casi nada antes de usarlo para que esté libre de errores y funcione siempre. Eso también es genial si tienes pocos objetivos en el mismo proyecto, por lo que no tienes que recordar qué ID de aplicación o enlace usar. Esta biblioteca también solicitaría al usuario que actualice la aplicación si hay una nueva versión en la tienda (esta está incorporada y la apaga con un simple indicador) directamente hacia la página de actualización de la aplicación si el usuario está de acuerdo.
Copie los 2 archivos de la biblioteca a su proyecto (iLink.h & amp; iLink.m).
En su 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.
}
y en el lugar donde desea abrir la página de calificación, por ejemplo, simplemente use:
[[iLink sharedInstance] iLinkOpenAppPageInAppStoreWithAppleID: YOUR_PAID_APP_APPLE_ID]; // You should find YOUR_PAID_APP_APPLE_ID from iTunes Connect
No olvides importar iLink.h en el mismo archivo.
Hay un documento muy bueno para toda la biblioteca allí y proyectos de ejemplo para iPhone y Mac.
Al menos iOS 9 y superior
- Abrir directamente en la App Store
Una aplicación
itms-apps://itunes.apple.com/app/[appName]/[appID]
Lista de aplicaciones de desarrollador
itms-apps://itunes.apple.com/developer/[developerName]/[developerID]
Según el último documento de Apple Necesitas usar
appStoreLink = "https://itunes.apple.com/us/app/apple-store/id375380948?mt=8"
o
SKStoreProductViewController
Si tiene la identificación de la tienda de aplicaciones, es mejor que la use. Especialmente si en el futuro puede cambiar el nombre de la aplicación.
http://itunes.apple.com/app/id378458261
Si no tiene la identificación de la tienda de aplicaciones, puede crear una URL basada en esta documentación 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;
}
Pasa esta prueba
- (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);
}
A pesar de que hay muchas respuestas aquí, ninguna de las sugerencias para vincular a las aplicaciones de los desarrolladores parece funcionar más.
La última vez que lo visité pude hacerlo funcionar usando el formato:
itms-apps://itunes.apple.com/developer/developer-name/id123456789
Esto ya no funciona, pero eliminar el nombre del desarrollador sí lo hace:
itms-apps://itunes.apple.com/developer/id123456789
Inténtalo de esta manera
http://itunes.apple.com/lookup?id= " su ID de aplicación aquí " return json. De aquí, encuentre la tecla " trackViewUrl " y el valor es la url deseada. use esta URL (solo reemplace https://
con itms-apps://
). Esto funciona bien.
Por ejemplo, si su ID de aplicación es xyz, vaya a este enlace http://itunes.apple.com/lookup?id=xyz
Luego busque la url para la clave " trackViewUrl ". Esta es la url para su aplicación en la tienda de aplicaciones y para usar esta url en xcode intente esto
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]];
Gracias