Pregunta

Estoy creando una versión gratuita de mi juego de iPhone.Quiero tener un botón en el interior de la versión gratuita que lleva a la gente a la versión de pago en la app store.Si yo uso un enlace estándar

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

el iPhone abre Safari en primer lugar, y luego la app store.He usado otras apps que abrir la app store directamente, así que sé que es posible.

Alguna idea?¿Cuál es el Esquema de URL de la app store?

¿Fue útil?

Solución

Editado el 02/02/2016

A partir de iOS 6 SKStoreProductViewController . Puede vincular una aplicación sin salir de su aplicación. El fragmento de código en Swift 3.x / 2.x y Objective-C es aquí .

  

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

  

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

     

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

     

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


Notas adicionales:

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

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

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 abrir la tienda desde una aplicación:

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

Otros consejos

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

itms-apps: // ...

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

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

Para el verano de 2015 ...

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

reemplazar "id1234567890' con 'id' y 'los diez dígitos del número de

  1. Esto funciona perfectamente en todos los dispositivos.

  2. No se directamente a la app store, no redirecciona.

  3. Está bien para todos tiendas nacionales.

  4. Es cierto que debe mover a la utilización de loadProductWithParameters, pero si el propósito del enlace es la actualización de la aplicación que son en realidad dentro de:es posiblemente el mejor uso de este "a la antigua" enfoque.

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 de iOS y otra para aplicaciones de Mac:

     

Nombre de la 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 canónico de App Store. 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, & Quot; & Amp; & Quot;)).

     

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

     

Convertir todos los caracteres a minúsculas

     

Eliminar todos los símbolos de copyright (& # 169;), marca registrada (& # 8482;) y marca registrada (& # 174;)

     

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

     

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

     

Reemplazar acentuado y otros " decorado " caracteres (& # 252 ;, & # 229 ;, etc.) con su carácter elemental (u, a, etc.)

     

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

     

Listado de 2 caracteres de puntuación que deben eliminarse.

     

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

     

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

     

App Store

     

Ejemplos de nombres de empresas

     

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

     

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

     

Fotografía de Chen & amp; Software = & Gt; http://appstore.com/chensphotographyandsoftware

     

Ejemplos de nombres de aplicaciones

     

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

     

¿Dónde & # 8217; s My Perry? = > http://appstore.com/wheresmyperry

     

Brain Challenge & # 8482; = > http://appstore.com/brainchallenge

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 las aplicaciones itms 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];

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

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:// con itms-apps://
  3. Abra 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

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.

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

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

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

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

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

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/

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

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

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 usar:
openStoreProductWithiTunesItemIdentifier(identifier: "here_put_your_App_id")

Nota:

  

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

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

Funciona como un regalo

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 en el país, luego el 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 el ID de la aplicación y el sistema operativo en el que se está ejecutando y averiguaría qué enlace debería estar creado). 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 solicitarí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 hacia 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 & amp; iLink.m).

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

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

No olvides importar iLink.h en el mismo archivo.

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

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]

Según el último documento de Apple Necesitas usar

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

o

SKStoreProductViewController 

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

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

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

Inténtalo de esta manera

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top