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''
Esto funciona perfectamente en todos los dispositivos .
Va directamente a la tienda de aplicaciones, no redirige.
Está bien para todas las tiendas nacionales .
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:
- 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)
}
- 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
Para tener un enlace directo sin redireccionar:
- Use el creador de enlaces de iTunes http://itunes.apple.com/linkmaker/ para obtener el enlace directo real
- Reemplace
http://
conitms-apps://
- Abra el enlace con
[[UIApplication sharedApplication] openURL:url];
Tenga cuidado, esos enlaces solo funcionan en dispositivos reales, no en simuladores.
Fuente: https://developer.apple.com/library/ios/#qa/qa2008/qa1629.html
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
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/
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);
}
Simplemente cambia ''itunes'' a ''phobos'' en el enlace de la aplicación.
http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=300136119&mt=8
Ahora se abrirá la App Store directamente.
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:
- Inicia iTunes en tu computadora.
- Busque el elemento que desea vincular.
- 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.
- En su aplicación, cree un objeto
NSURL
con la URL de iTunes copiada, luego pase este objeto alUIApplication
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)!)
}