Pregunta Cómo vincular aplicaciones en la tienda de aplicaciones


Estoy creando una versión gratuita de mi juego para iPhone. Quiero tener un botón dentro de la versión gratuita que lleva a las personas a la versión paga 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?


624


origen


Respuestas:


Editado en 2016-02-02

A partir de iOS 6 SKStoreProductViewController clase fue presentada. Puede vincular una aplicación sin salir de su aplicación. Fragmento de código en Swift 3.x / 2.x y C objetivo es aquí.

UN SKStoreProductViewController objeto presenta una tienda que permite   usuario para comprar otros medios de la App Store. 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.

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

Para enviar clientes a un específico   solicitud:    http://itunes.com/apps/appname

Mandar   clientes a una lista de aplicaciones que tiene   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   URL:    http://itunes.com/apps/developername/appname


Notas adicionales:

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

Para obtener información sobre cómo nombrar, consulte Apple QA1633:

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

Editar (a partir de enero de 2015):

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

  1. Inicie iTunes en su computadora.
  2. Busque el artículo que desea vincular.
  3. Haga clic con el botón derecho o presione la tecla Control y haga clic en el nombre del elemento en iTunes, luego elija "Copiar URL de iTunes Store" en el menú emergente.
  4. En tu aplicación, crea un NSURL objeto con la URL de iTunes copiada, luego pase este objeto a UIApplicationes openURL: método para abrir su artículo 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)!)
    }

693



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

itms-apps: // ...

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

Espero que ayude.


EDIT: ABR, 2017. itms-apps: // en realidad funciona de nuevo en iOS10. Lo probé

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.


325



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 vincular las aplicaciones de un desarrollador y el nombre del desarrollador tiene signos de puntuación o espacios (por ejemplo, Development Company, LLC), configure su URL de esta manera:

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

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


162



Comenzando desde iOS 6 de forma correcta para hacerlo mediante el uso de SKStoreProductViewController clase.

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")

C objetivo:

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

Puedes obtener kAppITunesItemIdentifier (identificador de elemento de itunes de la aplicación) como este: (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]];

44



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 derecho a la tienda de aplicaciones, sin redirecciones.

  3. Está bien para todos tiendas nacionales.

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


33



Apple acaba de anunciar las URL de appstore.com.

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

Hay tres tipos de enlaces cortos de la tienda de aplicaciones, en dos formas, una para aplicaciones iOS, otra 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 compañía

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 canonical App Store Short Link. 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, "&")).

Para crear un enlace corto de la tienda de aplicaciones, aplique las siguientes reglas al nombre de su compañía o aplicación:

Eliminar todo el espacio en blanco

Convierta todos los caracteres a minúsculas

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

Reemplace ampersands ("&") con "y"

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

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

Deje todos los demás caracteres tal como están.

Listado 2 caracteres de puntuación que deben eliminarse.

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

A continuación hay algunos ejemplos para demostrar la conversión que tiene lugar.

Tienda de aplicaciones

Ejemplos de nombre de la compañía

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

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

Fotografía y software de Chen => http://appstore.com/chensphotographyandsoftware

Ejemplos de nombre de la aplicación

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

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

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


31



Este código genera el enlace de 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];

29



Simplemente cambie 'itunes' por '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


27



Para tener un enlace directo sin redirección:

  1. Utilice el creador de enlaces de iTunes http://itunes.apple.com/linkmaker/ para obtener el enlace directo real
  2. Reemplace la http:// con itms-apps://
  3. Abra el enlace con [[UIApplication sharedApplication] openURL:url];

Tenga cuidado, esos enlaces solo funcionan en dispositivos reales, no en simulador.

Fuente : https://developer.apple.com/library/ios/#qa/qa2008/qa1629.html


25



Esto funcionó perfectamente para mí con 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]];

La cantidad de redireccionamientos es CERO.


15