Cómo vincular a aplicaciones en la tienda de aplicaciones


700

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

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

el iPhone abre Safari primero, 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?


1
Para SWIFT 3.X y aplicaciones localizadas, esta respuesta podría ayudar: stackoverflow.com/a/41765175/3143890
LukeSideWalker

Respuestas:


771

Editado el 02-02-2016

A partir de iOS 6 , se introdujo la clase SKStoreProductViewController . Puede vincular una aplicación sin salir de su aplicación. Fragmento de código en Swift 3.x / 2.x y Objective-C es aquí .

Un objeto SKStoreProductViewController presenta una tienda que permite al usuario comprar otros medios de la tienda de aplicaciones. Por ejemplo, su aplicación puede 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 App Store con enlaces de iTunes Con los enlaces de iTunes puede proporcionar a sus clientes una manera fácil de acceder a sus aplicaciones en 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 App Store: http://itunes.com/apps/developername

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


Notas adicionales:

Puedes reemplazar http://con itms://oitms-apps:// para evitar redireccionamientos.

Tenga en cuenta que itms://enviará al usuario a la tienda de iTunes y lo itms-apps://enviará al App Store!

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 enlaces de itunes.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 iniciar la tienda desde una aplicación:

  1. Inicie iTunes en su computadora.
  2. Busque el elemento al que desea vincular.
  3. Haga clic derecho o control-clic en el nombre del elemento en iTunes, luego elija "Copiar URL de iTunes Store" en el menú emergente.
  4. En su aplicación, cree un NSURLobjeto con la URL de iTunes copiada, luego pase este objeto al método UIApplication's openURL: 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)!)
    }

161
Un consejo es usar itms: // en lugar de http: //, luego se abrirá directamente en la tienda de aplicaciones. En el iPhone, realizará 2 (!) Redireccionamientos cuando use http, y 1 cuando use itms. Cuando se usan los enlaces de phobos más antiguos (ver arriba), hay 0 redireccionamientos. Use la identificación de iTunes Connect si usa enlaces phobos. Puede optar por enviar una aplicación sin incluir el binario. De esta forma obtendrá la identificación antes de enviar el binario real. No he probado esto, pero he oído que funciona.
quano

11
Ver: developer.apple.com/library/ios/#qa/qa1633/_index.html (el espacio en blanco solo debe eliminarse).
Nathan S.

8
Excepto ... ¿cuál es el valor correcto para usar appname? ¿Es el "Nombre para mostrar paquete" de la aplicación? ¿Es insensible a mayúsculas y minúsculas? ¿Cómo se manejan los espacios en blanco, etc.?
Aroth

14
Esto debe probarse en un dispositivo real.
Protocolo

77
Esto DEBE ser probado en un dispositivo real, ¡sí! Luché con que no pasara nada durante aproximadamente una hora antes de enchufar el iPad y probarlo allí. Geh
Kalle

361

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

aplicaciones-itms: // ...

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 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.


2
@PEZ A partir de hoy, veo dos redireccionamientos cuando uso http: // ... La respuesta funciona perfectamente para mí: itms-apps: // ... abre directamente la aplicación App Store en el dispositivo, sin redireccionamientos.
Josh Brown

44
Rocotilos, ¿estás seguro de que esto ya no funciona? Puedes publicar un enlace?
johndodo

8
En iOS itmsabre iTunes. mientras itms-appsabre la tienda de aplicaciones. ¡Esta es una diferencia clave si se solicita a los usuarios que actualicen! (iOS 10)
mcm

2
itms-appsabre la aplicación App Store para mí a través openURL:de iOS 10.2. Parece no ser un problema.
pkamb

1
Desde 10.3, este método funciona, pero tiene que pasar por una ventana emergente de visualización intermedia '¿abrir esta URL con la tienda de aplicaciones'? Referencia: blog.branch.io/…
gabry

51

Comenzando desde iOS 6 de la manera correcta de hacerlo usando la clase SKStoreProductViewController .

Swift 5.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)
        }
    }
}
private func productViewControllerDidFinish(viewController: SKStoreProductViewController) {
    viewController.dismiss(animated: true, completion: nil)
}
// Usage:
openStoreProductWithiTunesItemIdentifier("1234567")

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

44
en swift no olvides importar y delegar: import StoreKit class RateMeViewController: UIViewController, SKStoreProductViewControllerDelegate {
djdance

Esto todavía funciona, sin embargo, cuando va y hace clic en Escribir una reseña, no funciona. Debe hacer clic en el botón Almacenar en la esquina superior y luego hacer clic en Escribir una reseña. Alguien sabe una solución?
socca1157

"Escribir una reseña" intenta abrir otro modal y falla, probablemente porque ya está presentando en modal. Pero Apple lo obliga. Parece que no hay una manera adecuada de hacer que las revisiones funcionen. haciendo que todo este concepto sea nulo.
AmitP

Ese json no siempre devuelve datos y devuelve el recuento cero a veces. No es confiable obtener la identificación de la aplicación antes del envío.
Amber K

41

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

  3. Está bien para todas las tiendas nacionales. .

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


Además, para dirigir a su página de desarrollador (si desea mostrarle al usuario su catálogo de aplicaciones) puede usar: NSString * simple = @ "itms-apps: //itunes.com/apps/YOUR_COMPANY_NAME";
TheBestBigAl

2
¿Dónde encuentro esta identificación?
mcfly soft

1
¿Verano 2015? Como si el mundo entero viviera en el mismo país. :(
nacho4d

39

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 iOS y 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 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 al nombre de su empresa o aplicación:

Eliminar todos los espacios en blanco

Convierta todos los caracteres a minúsculas

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

Reemplace los signos de unión ("&") con "y"

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

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

Deje todos los demás personajes como están.

Listado de 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 nombres de empresas

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

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

Fotografía y software de Chen => 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


1
esto es realmente lo único que todavía funciona confiable para Mac Store al menos
Radu Simionescu

Es bueno saber sobre esto, pero desafortunadamente en iOS esto redirige a través de Safari (y da un feo mensaje de "No se puede verificar la identidad del servidor").
sudo make install

NO. Lea esto: "Estos enlaces cortos de la tienda de aplicaciones se proporcionan para su comodidad y no se garantiza que se vinculen a una aplicación o empresa en particular". Entonces, básicamente se da al azar.
durazno

30

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 funciona, pero también debe eliminar caracteres especiales como guiones del nombre de la aplicación.
Macondo2Seattle

Gracias @ 3 revs y @BlackRider
Ganesh Guturi

¿Podemos abrir y mostrar todas las aplicaciones cargadas por el desarrollador en una página?
Imran

Esta fue la única solución directa que funcionó para mí con redireccionamientos mínimos y manejo máximo del espacio en blanco del nombre de la aplicación.
LordParsley

29

Para tener un enlace directo sin redireccionamiento:

  1. Use iTunes link maker http://itunes.apple.com/linkmaker/ para obtener el enlace directo real
  2. Reemplace el http://conitms-apps://
  3. Abre 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


3
+1 para itunes.apple.com/linkmaker, todos prueban el enlace en un dispositivo que no está en el simulador, estaba perdiendo el tiempo probando el simulador.
karthik

2
Gracias por la información sobre Simulator,
agregaré


18

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.


13

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

Listado 1 Inicio de 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]];

Consulte https://developer.apple.com/library/ios/qa/qa1629/_index.html última actualización de marzo de 2014 a partir de esta respuesta.

Para las aplicaciones que admiten iOS 6 y superior, Apple ofrece un mecanismo 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.


12

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 se puede procesar" en iOS 4.3.3


1
Si esto no funciona para usted, pruebe la siguiente sintaxis: itms-apps: //itunes.com/apps/ChuckSmith/id290402113 reemplazando mi nombre con su empresa y mi ID con su ID de artista que puede obtener desde el enlace de iTunes maker: itunes.apple.com/linkmaker
Chuck Smith

También podría intentar codificar esos caracteres "especiales", es decir, reemplazar "." con "% 2E"
wzs

esa es la respuesta perfecta!
Sam B


9

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

8

Esta es una manera 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]];
 } 

6

Para Xcode 9.1 y Swift 4:

  1. 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)
}
  1. Cómo utilizar:
openStoreProductWithiTunesItemIdentifier(identifier: "here_put_your_App_id")

Nota:

Es muy importante ingresar la identificación exacta de su aplicación. Porque esto causa un error (no muestra el registro de errores, pero nada funciona bien debido a esto)


1
Estoy haciendo lo mismo, ejecutándome en el dispositivo. Sin éxito
Andrea Mugnaini

4

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

Trabaja un regalo


4

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 de país, luego la del 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 la ID de la aplicación y el sistema operativo en el que se está ejecutando y averiguaría qué enlace se debe crear). 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 le indicarí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 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 e iLink.m).

En su aplicación Delegate.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 olvide importar iLink.h en el mismo archivo.

Hay un documento muy bueno para toda la biblioteca allí y un ejemplo de proyectos para iPhone y Mac.


4

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]

appNameno es necesario.
DawnSong

4

Según el último documento de Apple, debe usar

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

o

SKStoreProductViewController 

¿Puedes actualizar tu enlace por favor? Esto parece bastante interesante si eso no funciona.
Rémy Virin

El documento vinculado no menciona itms:o itms-apps:. Los enlaces que usan ese esquema funcionan bien en mis dispositivos con iOS 12.
Theo

4

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 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í:

itms-apps://itunes.apple.com/developer/id123456789

3

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

3

Todas las respuestas están desactualizadas y no funcionan; usa el siguiente método.

Todas las aplicaciones de un desarrollador:
itms-apps://apps.apple.com/developer/developer-name/developerId

Aplicación individual:
itms-apps://itunes.apple.com/app/appId


1

abrirá la App Store directamente

NSString *iTunesLink = @"itms-apps://itunes.apple.com/app/ebl- 
skybanking/id1171655193?mt=8";

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];

0

Intenta de esta manera

http://itunes.apple.com/lookup?id= "su ID de aplicación aquí" devuelva json. De aquí, encuentre la clave " trackViewUrl " y el valor es la URL deseada. usa esta url (solo reemplaza https://conitms-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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.