2010-03-29 9 views
21

Mi piacerebbe essere in grado di determinare a quale negozio si connette l'utente dall'interno della mia app, in modo che io possa indirizzarli ad alcuni contenuti appropriati per il loro dispositivo E negozio. Qualcuno sa come ottenere queste informazioni?Come rilevare lo store iTunes attivo su iPhone/iPod Touch/iPad?

In pratica, se l'utente è nel Regno Unito e si connette allo store del Regno Unito, desidero restituire GB, se in Corea, il mio metodo/metodo, KR, Australia = AU ecc. Qualsiasi aiuto sarebbe apprezzato.

risposta

33

L'approccio per ottenere il codice del paese delle impostazioni locali dell'utente funzionerà ... ma solo se l'archivio iTunes dell'utente è uguale alla loro locale. Questo non sarà sempre il caso.

Se si crea un elemento di acquisto in-app, è possibile utilizzare le API StoreKit di Apple per scoprire l'attuale stato iTunes dell'utente, anche se è diverso dalle impostazioni locali del dispositivo. Ecco un codice che ha funzionato per me:

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

Un po 'in ritardo per la festa per me, e non avrò alcuna possibilità di usarlo ora da solo. Se qualcun altro verifica che questo funzioni davvero, e puoi ottenere alcuni voti positivi, ti segnalo come risposta. È passato molto tempo fa, ma sono abbastanza sicuro che l'API StoreKit non fosse in quel momento. – pms1969

+0

Questo funziona. Non uso lo stesso codice, ma l'idea di leggere il codice valuta di iTunes Store da 'product.priceLocale' funziona sicuramente. – cheeesus

+0

Grazie - questo funziona. –

0

Un modo duro per ottenere questa funzione è quella di istituire una singola applicazione per ogni paese app store. Ogni app contiene le informazioni del proprio paese di appartenenza. Ciò presuppone che un utente si attenga a un negozio, il che dovrebbe essere vero per la maggior parte delle persone.

+0

Non proprio il tipo di soluzione che sto cercando, anche se, in un certo senso, lo farò. Sono sicuro che c'è un modo più semplice, semplicemente non so cosa sia. – pms1969

-3

Probabilmente si dovrebbe usare

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

Ciò restituirà un codice di linguaggio come it_IT o en_UK o en_AU o addirittura zh_CN, zh_MY, jp_JP e così via.

analizzare i codici corretti, che si sostegno e dirigerli conseguenza.

+0

Grazie Mugunth, ma le impostazioni internazionali e il negozio non corrispondono necessariamente alla stessa cosa. Ho bisogno di un modo elegante per capire il negozio a cui è diretto l'utente. OSSIA su quale negozio spendono i loro soldi. Non supponiamo che ci sia un userdefaults per NSAppStore? – pms1969

+0

Giù votato, perché questo _non_ fornisce le impostazioni locali di iTunes Store dell'utente. –

0

vi consiglio di provare iTunes deep links. Ad esempio, http://itunes.com/apps/appname dovrebbe portare l'utente all'App Store locale dove spende i soldi.

+1

ok, ma come faccio a sapere che cos'è il negozio. Ad esempio, potrei visualizzare qualcosa come "Il tuo App Store è ..." – pms1969

+0

@Costique, il primo link nella tua risposta non funziona. – kelin

1

Ho bisogno la stessa funzionalità. Al momento sto considerando di leggere i dati di NSLocale come predefiniti, ma aggiungo un'impostazione in settings.app affinché l'utente possa personalizzare questo se non corrisponde.

Questa funzione è tratto da an answer to another question of mine.

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

Pensato anche all'ambientazione. Ma non mi piace particolarmente come idea, perché ad esempio, ci sono molte persone che parlano naturalmente spagnolo negli stati, le cui impostazioni potrebbero essere completamente diverse dal negozio che usano. Penso di essere vicino a una mia risposta, e posterò se funzionerà. – pms1969

+1

Ho pensato che questa risposta a una delle mie domande potrebbe essere di interesse: http://stackoverflow.com/questions/2639684/itunes-music-store-link-maker-how-to-search-from-within-my-app/2668190 # 2668190 il metodo 'getUserCountry' di ThierryB non restituisce gli Stati Uniti per gli utenti negli Stati Uniti, indipendentemente dalla lingua impostata? – prendio2

+0

Grazie, ci ho provato subito, ma non ha funzionato come mi aspettavo, o restituito un risultato errato. Detto questo, non riesco a ricordare di averlo fatto al telefono (l'ho fatto in simulatore), quindi avrò un gioco quando risolvo il mio dannato profilo di provisioning e posso eseguire di nuovo il debug sul telefono. – pms1969

Problemi correlati