2010-06-15 27 views
25

Ich muss beim Start feststellen, in welchem ​​Land ein Benutzer ist, für eine iPhone-Anwendung. Vermutlich muss ich Lokalisierungsdienste einschalten und eine Art umgekehrte Geokodierung durchführen. Ich möchte nicht wirklich einen Webservice von Drittanbietern verwenden, gibt es andere Vorschläge für die Bestimmung des Landes von welchen Standortdiensten?Ermitteln iPhone Land des Benutzers

Zunächst muss ich nur überprüfen, ob der Benutzer in den USA ist oder nicht, aber das kann sich in Zukunft ändern, um weitere Länder hinzuzufügen. Ich verstehe, dass der Standort nicht immer ermittelt werden kann oder dass der Benutzer die Standortdienste deaktiviert hat. Grundsätzlich muss ich nur wissen, ob der Benutzer innerhalb der USA erkannt wird, um eine bestimmte Funktion zu deaktivieren.

BEARBEITEN: Bei weiterem Lesen sieht es aus wie MKReverseGeocoder wäre der Weg zu gehen, außer ich möchte keine Karten in meiner App anzeigen, was bedeutet, dass ich nicht verwenden darf.

Antwort

4

Angesichts der Einschränkungen von MKReverseGeocoder, scheint es die einzig machbare Möglichkeit für mich zu erreichen, was ich nach ist, einen Drittanbieter-Dienst zu verwenden, um einen umgekehrten Geocode durchzuführen. Ich habe mich entschieden, mit GeoNames zu gehen, da sie scheinen, die Standardwahl zu sein.

1

Wenn Sie die Google-Dienste des iPhone SDK nicht verwenden möchten, können Sie nicht einfach die Koordinaten der USA von A-Grenzen speichern und prüfen, ob Sie sich darin befinden oder nicht?

Hier ist eine wichtige Frage in diesem Fall ist How can I determine whether a 2D Point is within a Polygon?

Wenn der Zweck der Beschränkung ist etwas anderes als Erfahrung Benutzer (zB Sie Konformität mit einigem spezifischen US-Gesetz zu erzwingen), dh wenn der Benutzer kann nicht Ich würde sagen, dass Sie etwas strengeres überprüfen müssen (schließlich würde der Benutzer die Verwendung von Standortdiensten einfach nicht zulassen, sonst würde er/sie?).

Ein solcher Ansatz wäre es, eine IP-Suche durchzuführen, z. http://www.maxmind.com/app/geoip_country

+0

Der Zweck besteht darin, die Funktionalität einzuschränken, wenn sich der Benutzer innerhalb der USA befindet. Wenn der Benutzer die Standortdienste deaktiviert hat oder sich außerhalb der USA befindet, ist die Funktionalität nicht eingeschränkt. Ich weiß, dass es einfach ist, herumzukommen, aber das sind die Anforderungen, die ich habe - es ist eher eine Vorliebe, dass die Funktionalität eingeschränkt ist und nicht jedes Mal 100%. –

+0

Ich würde sicherlich gerne die Google-Dienste des iPhone SDK nutzen. Gibt es etwas, das mir geben wird, wonach ich suche? –

33

Ein weiterer Trick, können Sie versuchen, ist die Überprüfung der Träger des MCC:

#import <CoreTelephony/CTTelephonyNetworkInfo.h> 
#import <CoreTelephony/CTCarrier.h> 

CTTelephonyNetworkInfo *netInfo = [[CTTelephonyNetworkInfo alloc] init]; 
CTCarrier *carrier = [netInfo subscriberCellularProvider]; 
NSString *mcc = [carrier mobileCountryCode]; 
+1

Würde nicht mit iPod Touch funktionieren, fehlende Telefonie – JOM

+3

Natürlich ist es nur eine zusätzliche Informationsquelle. – zoul

+6

Apples Dokumentation sagt 'CTTelephonyNetworkInfo' gibt nur Informationen über den Mobilfunkanbieter, der die SIM-Karte angeboten hat. Also dieses Stück Code gibt das gleiche Ergebnis, ob Sie Roaming oder nicht? – phoenies

2

Das NSLocale Objekt, wie durch [NSLocale systemLocale], and [NSLocale autoupdatingCurrentLocale] zurück `) den Wert NSLocaleCountryCode enthält. Schau es dir in der Apple-Dokumentation an.

+0

Sicher könnte der Benutzer nur ihr Gebietsschema ändern? –

+0

Gebietsschema ist nur Konfiguration.Es hat nichts mit dem tatsächlichen Standort zu tun. –

+0

Dies ist eine Benutzereinstellung, ja, aber das ist in vielen Fällen das, was der Programmierer wünscht. Beispielsweise möchte ein Benutzer, dass Datum, Uhrzeit und Währungsformatierung unabhängig von dem Land, in dem er sich befindet, für sein bevorzugtes Gebietsschema festgelegt werden. Dies hängt vom Anwendungsfall ab. –

23
NSLocale *locale = [NSLocale currentLocale]; 
NSString *countryCode = [locale objectForKey: NSLocaleCountryCode]; 

NSString *countryName = [locale displayNameForKey: NSLocaleCountryCode 
         value: countryCode]; 
+0

Können Benutzer das Gebietsschema selbst ändern und so unzuverlässig machen? Ist das Gebietsschema gleich oder anders als die Einstellung "Sprache" des Telefons? –

+1

Dies kann vom Benutzer unter Einstellungen> Allgemein> International> Region Format geändert werden. Es gibt ein Regionsformat und eine Spracheinstellung. – MonsieurDart

+0

Nicht alle Benutzer verwenden echte Wohnsitzländer. Sollte mit Vorsicht verwendet werden. – AlexeyVMP

Verwandte Themen