2013-07-11 33 views
11

Nie potrzebuję dokładnych danych o lokalizacji i nie chcę, aby użytkownik zobaczył alert "Ta aplikacja chce określić swoją lokalizację". Muszę tylko określić kraj użytkownika, zakładając, że ma on połączenie internetowe przez sieć lub wi-fi.iOS - Określ kraj użytkownika bez użycia CLLocationManager

Jaki jest najlepszy sposób na zrobienie tego? Czy jest jakiś sposób korzystania z ich adresów IP?

ta będzie działać tylko wtedy, gdy mieli nośny:

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

I NSLocale nie jest wiarygodne, że użytkownik może zmienić go w swoich ustawieniach urządzenia. Nie można użyć ustawienia języka urządzenia z tego samego powodu. Potrzebuję kraju w oparciu o to, gdzie fizycznie się znajduje.

+0

Ponieważ użytkownik może być w trybie samolotu lub nie jest podłączony do sieci, czy użytkownik może używać proxy, nie ma gwarancji, że można uzyskać dokładne informacje z sieci. – rmaddy

Odpowiedz

1

Możesz uzyskać adres IP użytkownika i użyć bazy danych geolokalizacji, aby odgadnąć jego lokalizację na podstawie tego, jak opisano tutaj: https://en.wikipedia.org/wiki/IP_address_location. Jeśli interesujesz się tylko regionem, prawdopodobnie znajdziesz niektóre dane w regionalnych rejestrach internetowych (https://en.wikipedia.org/wiki/Regional_Internet_registry), które mogą Ci pomóc, ponieważ kontrolują wszystkie adresy IP w danym regionie.

+0

W jaki sposób obejść ten problem - jeśli jestem na moim domowym Wi-Fi, mój adres IP to 192.168.x.x, a jeśli jestem w mojej sieci komórkowej, mój adres IP to 10.174.x.x? – soleil

+0

Masz rację, po prostu dostaniesz śmieci na swój adres IP - działałoby to tylko, gdybyś był stroną internetową lub czymś. Chciałbym wypróbować niektóre z odpowiedzi tutaj, aby uzyskać adres samego routera: http://stackoverflow.com/questions/2113580/objective-c-how-to-fetch-the-router-address?lq=1. –

+0

Twój lokalny adres IP (np .: 192.168.x.x) jest inny niż twój zewnętrzny adres IP. Więc jeśli zamierzasz użyć adresu IP, aby uzyskać lokalizację użytkownika, musisz uzyskać jego zewnętrzny adres IP. –