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?

mate
fuente
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)!)
    }
Nathan S.
fuente
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.

GeneCode
fuente
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]];
Ramis
fuente
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".

Joe Blow
fuente
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

Dev01
fuente
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];
Tibidabo
fuente
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

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

Almas Adilbek
fuente
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.

Ben Flynn
fuente
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

Andrés
fuente
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
11

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/

Octavio Berlanga
fuente
Este me ayudó, porque el enlace en mi iTunes Connect no funcionó, y en el generador sí. gracias
Dorad
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]];
TouchMint
fuente
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]];
 } 
iChirag
fuente
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)

xhinoda
fuente
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

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

Jameson
fuente
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]
Jakub Truhlář
fuente
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 
Mihir Oza
fuente
¿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
León
fuente
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);
}
hfossli
fuente
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

Karen Karapetyan
fuente
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]];
Biswajit Banik
fuente
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

Tunvir Rahman Tusher
fuente