apps apple app ios objective-c app-store

ios - apple - Cómo enlazar a aplicaciones en la tienda de aplicaciones



url app store iphone (22)

Estoy creando una versión gratuita de mi juego de iPhone. Quiero tener un botón dentro de la versión gratuita que lleve a las personas a la versión de pago en la tienda de aplicaciones. Si utilizo un enlace estándar

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

El iPhone abre primero Safari, y luego la tienda de aplicaciones. He usado otras aplicaciones que abren la tienda de aplicaciones directamente, así que sé que es posible.

¿Algunas ideas? ¿Cuál es el esquema de URL para la tienda de aplicaciones?


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 del desarrollador

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


Para el verano de 2015 en adelante ...

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

Reemplace ''id1234567890'' con ''id'' y ''su número de diez dígitos''

  1. Esto funciona perfectamente en todos los dispositivos .

  2. Va directamente a la tienda de aplicaciones, no redirige.

  3. Está bien para todas las tiendas nacionales .

  4. Es cierto que debería utilizar loadProductWithParameters , pero si el propósito del enlace es actualizar la aplicación en la que se encuentra: es posible que sea mejor utilizar este enfoque "anticuado".


Algunas respuestas sugieren el uso de ''itms'' o ''itms-apps'', pero Apple no recomienda específicamente esta práctica. Solo ofrecen la siguiente manera de abrir la App Store:

Listado 1 Inicio de la App Store desde una aplicación de 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 actualizado por última vez en marzo de 2014 a partir de esta respuesta.

Para aplicaciones compatibles con iOS 6 y superior, Apple ofrece un mecanismo SKStoreProductViewController 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.


Apple acaba de anunciar la url appstore.com.

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

Hay tres tipos de enlaces cortos de App Store, en dos formas, uno para aplicaciones iOS y otro para aplicaciones Mac:

nombre de 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 la 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 de App Store canónico. Esta URL canónica se crea al cambiar o eliminar ciertos caracteres (muchos de los cuales son ilegales o tienen un significado especial en una URL (por ejemplo, "&")).

Para crear un enlace corto de App Store, aplique las siguientes reglas a su compañía o nombre de aplicación:

Eliminar todo el espacio en blanco

Convertir todos los caracteres a minúsculas

Eliminar todos los símbolos de copyright (©), marca registrada (™) y marca registrada (®)

Reemplace ampersands ("&") con "and"

Quitar la mayoría de la puntuación (ver el Listado 2 para el conjunto)

Reemplace los caracteres acentuados y otros "decorados" (ü, å, etc.) con su carácter elemental (u, a, etc.)

Deja todos los demás caracteres como están.

Listado 2 Caracteres de puntuación que deben eliminarse.

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

A continuación se muestran algunos ejemplos para demostrar la conversión que se lleva a cabo.

Tienda de aplicaciones

Ejemplos de nombres de empresas

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

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

Chen´s Photography & Software => http://appstore.com/chensphotographyandsoftware

Ejemplos de nombres de aplicaciones

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

¿Donde esta mi Perry? => http://appstore.com/wheresmyperry

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


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


De acuerdo con QA1629 itms-apps: o itms: no funcionará. Necesitas usar

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

o

SKStoreProductViewController


Esta es una forma simple y breve de redirigir / vincular otras aplicaciones existentes 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]]; }


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


Esto está funcionando y enlazando directamente en ios5.

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


Esto funcionó perfectamente usando solo ID de APP:

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

El número de redirecciones es CERO.


La creación de un enlace podría convertirse en un problema complejo al admitir múltiples sistemas operativos y múltiples plataformas. Por ejemplo, WebObjects no es compatible con iOS 7 (algunos de ellos), algunos enlaces que cree abrirán otra tienda de país, luego la del usuario, etc.

Hay una biblioteca de código abierto llamada iLink que podría ayudarte.

Las ventajas de esta biblioteca es que los enlaces se encontrarán y crearán en el tiempo de ejecución (la biblioteca verificará el ID de la aplicación y el sistema operativo en el que se ejecuta y determinará qué enlace se debe crear). El mejor punto de esto es que no necesita configurar casi nada antes de usarlo para que no tenga errores y funcione siempre. Eso también es genial si tiene pocos objetivos en el mismo proyecto, por lo que no tiene que recordar qué ID de aplicación o enlace debe usar. Esta biblioteca también le pedirá al usuario que actualice la aplicación si hay una nueva versión en la tienda (esto está integrado y lo desactiva con una simple bandera) que apunta directamente a 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 & iLink.m).

En tu 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, use:

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

No te olvides de importar iLink.h en el mismo archivo.

Hay un muy buen documento para toda la biblioteca y un ejemplo de proyectos para iPhone y para Mac.


Para Xcode 9.1 y Swift 4:

  1. Importar StoreKit:

import StoreKit

2. Conformar el protocolo.

SKStoreProductViewControllerDelegate

3. Implementar 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) }

  1. Cómo utilizar:

openStoreProductWithiTunesItemIdentifier(identifier: "here_put_your_App_id")

Nota:

Es muy importante ingresar el ID exacto de su APP. Porque esto causa un error (no muestra el registro de errores, pero nada funciona bien debido a esto)


Para ser extremadamente conciso:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"itms://itunes.com/apps/appname"]];

Si desea enviar a todas las aplicaciones para un desarrollador, use

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"itms://itunes.com/apps/developername"]];

Estos funcionan para iOS 4.1

Si desea enlazar a las aplicaciones de un desarrollador y el nombre del desarrollador tiene puntuación o espacios (por ejemplo, Development Company, LLC), forme su URL de esta manera:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"itms-apps://itunes.com/apps/DevelopmentCompanyLLC"]];

De lo contrario, devuelve "Esta solicitud no se puede procesar" en iOS 4.3.3



Prueba de esta manera

http://itunes.apple.com/lookup?id= "su ID de aplicación aquí" devuelva json. A partir de esto, busque la tecla " trackViewUrl " y el valor es la url deseada. use esta url (simplemente 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



Puedo confirmar que si crea una aplicación en iTunes connect, obtendrá su ID de 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];

Trabaja un regalo


Si desea abrir una aplicación directamente en la App Store, debe utilizar:

itms-apps: // ...

De esta manera, abrirá directamente la aplicación App Store en el dispositivo, en lugar de ir primero a iTunes, luego solo abrirá la App Store (cuando se usa solo itms: //)

Espero que ayude.

EDIT: APR, 2017. itms-apps: // realmente funciona nuevamente en iOS10. Lo he probado.

EDIT: APR, 2013. Esto ya no funciona en iOS5 y superior. Solo usa

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

Y no hay más redirecciones.


Si desea enlazar a las aplicaciones de un desarrollador y el nombre del desarrollador tiene 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 se puede procesar" en iOS 4.3.3


Si tiene el ID de la tienda de aplicaciones, es mejor que lo use. Especialmente si en el futuro puede cambiar el nombre de la aplicación.

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

Si no tiene el ID 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); }



Editado el 2016-02-02

A partir de iOS 6 se SKStoreProductViewController clase SKStoreProductViewController . Puedes vincular una aplicación sin salir de tu aplicación. El fragmento de código en Swift 3.x / 2.xy Objective-C está here .

Un objeto SKStoreProductViewController presenta una tienda que le permite al usuario comprar otros medios desde la App Store. Por ejemplo, su aplicación podría mostrar la tienda para permitir al usuario comprar otra aplicación.

Desde Noticias y Anuncios para desarrolladores de Apple .

Dirigir a los clientes directamente a su aplicación en la App Store con enlaces de iTunes Con los enlaces de iTunes puede proporcionar a sus clientes una forma fácil de acceder a sus aplicaciones en la App Store directamente desde su sitio web o campañas de marketing. Crear un enlace de iTunes es simple y se puede hacer para dirigir a los clientes a una sola aplicación, a todas sus aplicaciones oa una aplicación específica con el nombre de su empresa especificado.

Para enviar clientes a una aplicación específica: http://itunes.com/apps/appname

Para enviar a los clientes a una lista de aplicaciones que tiene en la App Store: http://itunes.com/apps/developername

Para enviar a los clientes a una aplicación específica con el nombre de su empresa incluido en la URL: http://itunes.com/apps/developername/appname / http://itunes.com/apps/developername/appname

Notas adicionales:

Puede reemplazar http:// con itms:// o itms-apps:// para evitar redirecciones.

Para información sobre nombres, vea Apple QA1633:

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

Editar (a partir de enero de 2015):

Los enlaces de itunes.com/apps se deben actualizar a appstore.com/apps. Ver QA1633 arriba, que ha sido actualizado. Un nuevo QA1629 sugiere estos pasos y el código para iniciar la tienda desde una aplicación:

  1. Inicia iTunes en tu computadora.
  2. Busque el elemento que desea vincular.
  3. Haga clic con el botón derecho o presione la tecla Control sobre el nombre del elemento en iTunes, luego elija "Copiar la URL de la tienda iTunes" en el menú emergente.
  4. En su aplicación, cree un objeto NSURL con la URL de iTunes copiada, luego pase este objeto al UIApplication openURL : openURL para abrir su elemento en la App Store.

Código de muestra:

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

Swift 3.0

let urlStr = "itms://itunes.apple.com/us/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)!) }