2013-07-11 10 views
11

Ich brauche keine genauen Standortdaten, und ich möchte nicht, dass der Benutzer die Warnung "Diese App möchte Ihren Standort ermitteln" anzeigt. Ich muss nur das Land des Benutzers bestimmen, vorausgesetzt, sie haben eine Internetverbindung über das Netzwerk oder Wi-Fi.iOS - Ermitteln Sie das Land des Benutzers, ohne CLLocationManager zu verwenden

Was ist der beste Weg, dies zu tun? Gibt es eine Möglichkeit, ihre IP zu verwenden?

Dies würde nur funktionieren, wenn sie einen Träger haben:

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

Und NSLocale ist nicht zuverlässig, dass in dem Benutzer kann es Einstellungen in ihrem Gerät ändern. Die Spracheinstellung des Geräts kann aus dem gleichen Grund nicht verwendet werden. Ich brauche das Land basierend darauf, wo sie sich physisch befinden.

+0

Da ein Benutzer im Flugzeugmodus sein könnte oder nicht mit einem Netzwerk verbunden ist, oder der Benutzer könnte mit ein Proxy, es gibt keine Garantie, dass Sie genaue Informationen aus dem Netzwerk erhalten können. – rmaddy

Antwort

1

Sie können die IP-Adresse des Benutzers abrufen und eine Geolocation-Datenbank verwenden, um deren Position auf der Grundlage der hier beschriebenen zu erraten: https://en.wikipedia.org/wiki/IP_address_location. Wenn Sie nur mit der Region betroffen sind, können Sie wahrscheinlich einige Daten auf regionalen Internet-Register() Websites finden, die Ihnen helfen, da sie alle IP-Adressen für eine bestimmte Region steuern.

+0

Wie kommst du zu diesem Problem - Wenn ich zu Hause bin wi-Fi meine IP ist 192.168.x.x, und wenn ich in meinem Mobilfunknetz bin meine IP ist 10.174.x.x? – soleil

+0

Sie haben Recht, Sie werden nur Müll für Ihre IP-Adresse bekommen - das würde nur funktionieren, wenn Sie eine Website oder etwas wären. Ich würde versuchen, einige der Antworten hier, um die Adresse des Routers selbst zu erhalten: http://stackoverflow.com/questions/2113580/objective-c-how-to-fetch-the-router-address?lq=1. –

+0

Ihre lokale IP-Adresse (z. B. 192.168.x.x) unterscheidet sich von Ihrer externen IP-Adresse. Wenn Sie also eine IP-Adresse verwenden, um den Standort des Benutzers abzurufen, müssen Sie seine externe IP-Adresse abrufen. –