2010-03-29 15 views
21

Me gustaría poder determinar a qué tienda se conecta el usuario desde mi aplicación, de modo que pueda dirigirlos a un contenido apropiado para su dispositivo Y tienda. ¿Alguien sabe cómo obtener esta información?¿Cómo detectar la tienda de iTunes activa en el iPhone/iPod Touch/iPad?

Básicamente, si el usuario está en el Reino Unido y se conecta a la tienda del Reino Unido, quiero que mi función/método devuelva GB, si en Corea, quiero KR, Australia = AU etc. Cualquier ayuda sería apreciada.

Respuesta

33

El enfoque de conseguir el código de país de configuración regional del usuario va a funcionar ... pero sólo si la tienda iTunes de usuario es el mismo como su localización. Este no siempre será el caso.

Si crea un elemento de compra en la aplicación, puede usar las API StoreKit de Apple para averiguar el país de iTunes real del usuario, incluso si es diferente de la configuración regional de su dispositivo. Aquí hay un código que funcionó para mí:

- (void) requestProductData 
{ 
    SKProductsRequest *request= [[SKProductsRequest alloc] initWithProductIdentifiers: 
           [NSSet setWithObject: PRODUCT_ID]]; 
    request.delegate = self; 
    [request start]; 
} 

- (void) productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response 
{ 
    NSArray *myProducts = response.products; 
    for (SKProduct* product in myProducts) { 
     NSLocale* storeLocale = product.priceLocale; 
     storeCountry = (NSString*)CFLocaleGetValue((CFLocaleRef)storeLocale, kCFLocaleCountryCode); 
     NSLog(@"Store Country = %@", storeCountry); 
    } 

    [request release]; 

    // If product request didn't work, fallback to user's device locale 
    if (storeCountry == nil) { 
     CFLocaleRef userLocaleRef = CFLocaleCopyCurrent(); 
     storeCountry = (NSString*)CFLocaleGetValue(userLocaleRef, kCFLocaleCountryCode); 
    } 

    // Now we're ready to start creating URLs for the itunes store 
    [super start]; 
} 
+1

Llegué un poco tarde a la fiesta para mí, y no tendré ninguna posibilidad de usar esto ahora mismo. Si alguien más verifica que esto realmente funciona, y usted puede obtener algunos votos positivos, lo volveré a marcar como la respuesta. Hace mucho tiempo, pero estoy bastante seguro de que la API de StoreKit no existía en aquel entonces. – pms1969

+0

Esto funciona. No uso el mismo código, pero la idea de leer el código de moneda de iTunes Store de 'product.priceLocale' definitivamente funciona. – cheeesus

+0

Gracias - esto funciona. –

0

una manera difícil de conseguir esta función es la creación de una única aplicación para todos los países tienda de aplicaciones. Cada aplicación tiene su propia información de la tienda del país. Esto supone que un usuario se queda en una tienda, lo que debería ser cierto para la mayoría de las personas.

+0

No es realmente el tipo de solución que estoy buscando, aunque, en un aprieto, lo haré. Estoy seguro de que hay una manera más fácil, simplemente no sé qué es. – pms1969

-3

Probablemente debería utilizar

[[userDefaults dictionaryRepresentation] objectForKey:@"NSLocaleCode"]; 

Esto devolverá un código de idioma como en_US o es_ES o es_ES zh_CN o incluso, zh_MY, jp_JP y así sucesivamente.

analizar los códigos correctos que se apoyan y conducen en consecuencia.

+0

Gracias Mugunth, pero la configuración regional y la tienda no necesariamente equivalen a lo mismo. Necesito una manera elegante de averiguar la tienda a la que se dirige al usuario. ES DECIR. en qué tienda gastan su dinero. ¿No cree que hay valores de usuario para NSAppStore? – pms1969

+0

Abajo, porque esto no da la ubicación de iTunes Store del usuario. –

0

Sugiero que intentes iTunes deep links. Por ejemplo, http://itunes.com/apps/appname debe llevar al usuario a la App Store local donde gasta dinero.

+1

bien, pero ¿cómo puedo detectar qué es la tienda? Entonces, por ejemplo, podría mostrar algo como "Tu App Store es ..." – pms1969

+0

@Costique, el primer enlace en tu respuesta no funciona. – kelin

1

Necesito la misma funcionalidad. Por el momento estoy considerando leer usando datos de NSLocale como predeterminado, pero agregando una configuración en settings.app para que el usuario personalice esto si no coincide.

Esta función está tomada desde an answer to another question of mine.

- (NSString *)getUserCountry 
{ 
    NSLocale *locale = [NSLocale currentLocale]; 
    return [locale objectForKey: NSLocaleCountryCode]; 
} 
+3

Pensó en la configuración también. Pero no me gusta particularmente como una idea, como por ejemplo, hay muchas personas que hablan español de manera natural en los estados, cuya configuración regional puede ser completamente diferente de la tienda que usan. Creo que estoy cerca de una respuesta mía, y la publicaré si funciona. – pms1969

+1

pensé que esta respuesta a una de mis preguntas podrían ser de interés: http://stackoverflow.com/questions/2639684/itunes-music-store-link-maker-how-to-search-from-within-my-app/2668190 # 2668190 no habría método getUserCountry' 'thierryb de regresar de Estados Unidos para los usuarios de Estados Unidos, independientemente de lo que su lenguaje se establece en? – prendio2

+0

Gracias, lo intenté desde el principio, pero no funcionó de la manera que esperaba o devolvió un resultado incorrecto. Habiendo dicho eso, realmente no puedo recordar haberlo hecho por teléfono (lo había hecho en simulador), así que tendré una jugada cuando clasifique mi maldito perfil de aprovisionamiento y pueda depurar nuevamente en el teléfono. – pms1969

Cuestiones relacionadas