2010-03-29 9 views
21

Ich möchte in der Lage sein, zu bestimmen, aus welchem ​​Speicher der Benutzer sich in meiner App verbindet, damit ich sie zu einem geeigneten Inhalt für ihr Gerät AND speichern kann. Weiß jemand, wie man diese Information erhält?Wie erkennt man den aktiven iTunes Store auf dem iPhone/iPod Touch/iPad?

Grundsätzlich, wenn der Benutzer in Großbritannien ist, und verbindet sich mit dem UK-Shop, möchte ich meine Funktion/Methode GB, wenn in Korea, ich möchte KR, Australien = AU usw. Jede Hilfe wäre willkommen.

Antwort

33

Der Ansatz, den Ländercode des Gebietsschema des Benutzers immer funktioniert ... aber nur, wenn der iTunes Store Benutzer das gleiche wie ihre locale ist. Dies wird nicht immer der Fall sein.

Wenn Sie ein In-App-Kaufelement erstellen, können Sie die StoreKit-APIs von Apple verwenden, um das tatsächliche iTunes-Land des Benutzers zu ermitteln, auch wenn es sich von der Ländereinstellung des Geräts unterscheidet. Hier einige Code, der für mich gearbeitet:

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

Ein bisschen spät auf die Party für mich, und ich werde keine Chance haben, dies jetzt selbst zu verwenden. Wenn jemand anderes verifiziert, dass dies tatsächlich funktioniert, und Sie einige Up-Stimmen erhalten können, werde ich dies als die Antwort markieren. Es ist schon lange her, aber ich bin ziemlich sicher, dass die StoreKit API damals nicht da war. – pms1969

+0

Das funktioniert. Ich benutze nicht denselben Code, aber die Idee, den Währungscode des iTunes Stores aus 'product.priceLocale' zu ​​lesen, funktioniert definitiv. – cheeesus

+0

Danke - das funktioniert. –

0

Ein schwieriger Weg, diese Funktion zu bekommen, ist die Einrichtung einer einzigen App für jedes App Store-Land. Jede App enthält eigene Informationen zu Ihrem Land. Dies setzt voraus, dass ein Benutzer bei einem Geschäft bleibt, was für die meisten Leute wahr sein sollte.

+0

Nicht wirklich die Art der Lösung suche ich, obwohl in einer Bindung, ich das tun würde. Ich bin mir sicher, dass es einen einfacheren Weg gibt, ich weiß einfach nicht, was es ist. – pms1969

-3

sollten Sie wahrscheinlich verwenden

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

Dies wird einen Sprachcode wie en_US oder en_UK oder en_AU oder sogar zh_CN, zh_MY, jp_JP zurückzukehren und so weiter.

Analysieren Sie die richtigen Codes, die Sie unterstützen, und leiten Sie sie entsprechend weiter.

+0

Danke Mugunth, aber Locale und Store müssen nicht unbedingt gleich sein. Ich brauche einen eleganten Weg, um den Laden herauszufinden, an den der Benutzer gerichtet ist. I.E. Auf welchen Laden geben sie ihr Geld aus? Angenommen, es gibt Benutzerdefaults für NSAppStore? – pms1969

+0

Wird abgelehnt, weil dies nicht das Gebietsschema des iTunes Store des Benutzers angibt. –

0

Ich schlage vor, Sie versuchen iTunes deep links. Zum Beispiel sollte http://itunes.com/apps/appname den Benutzer zum lokalen App Store bringen, wo sie Geld ausgibt.

+1

ok, aber wie erkenne ich, was der Laden ist. So könnte ich zum Beispiel etwas wie "Ihr App Store ist ..." anzeigen – pms1969

+0

@Costique, der erste Link in Ihrer Antwort funktioniert nicht. – kelin

1

Ich brauche die gleiche Funktionalität. Im Moment überlege ich, ob ich Daten aus NSLocale als Standard lesen soll, aber ich füge eine Einstellung in settings.app hinzu, damit der Benutzer diese anpassen kann, wenn sie nicht übereinstimmt.

Diese Funktion wurde von an answer to another question of mine übernommen.

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

Dachte auch an die Einstellung. Aber ich mag das nicht besonders als eine Idee, wie zum Beispiel, dass Sie viele natürlich spanisch sprechende Leute in den Staaten haben, deren Locale sich komplett von dem Laden unterscheidet, den sie benutzen. Ich denke, ich bin nahe an einer Antwort von mir selbst, und ich werde posten, wenn es klappt. – pms1969

+1

Ich dachte, diese Antwort auf eine meiner Fragen könnte von Interesse sein: http://stackoverflow.com/questions/2639684/itunes-music-store-link-maker-how-to-search-from-within-my-app/2668190 # 2668190 würde die "getUserCountry" -Methode von ThierryB für Benutzer in den USA nicht zurückgeben, unabhängig davon, für welche Sprache sie eingestellt wurde? – prendio2

+0

Danke, ich habe das schon früh versucht, aber es hat nicht so funktioniert, wie ich es erwartet habe, oder ein falsches Ergebnis zurückgegeben. Nachdem ich das gesagt habe, kann ich mich nicht daran erinnern, es am Telefon gemacht zu haben (hatte im Simulator getan), also werde ich ein Spiel haben, wenn ich mein verdammtes Provisioning-Profil sortiere und wieder am Telefon debuggen kann. – pms1969

Verwandte Themen