2013-07-11 5 views
11

Мне не нужны точные данные о местоположении, и я не хочу, чтобы пользователь видел, как «Это приложение хочет определить ваше местоположение». Мне просто нужно определить страну пользователя, предполагая, что у них есть интернет-соединение через сеть или Wi-Fi.iOS - Определить страну пользователя без использования CLLocationManager

Каков наилучший способ для этого? Есть ли способ использовать свой IP-адрес?

Это будет работать только, если они имели носитель:

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

И NSLocale не является надежным в том, что пользователь может изменить его в настройках устройства. Невозможно использовать настройку языка устройства по той же причине. Мне нужна страна, основанная на том, где они физически расположены.

+0

Поскольку пользователь может быть в самолетном режиме или не подключен к сети, или пользователь может использовать прокси, нет гарантии, что вы можете получить точную информацию из сети. – rmaddy

ответ

1

Вы можете получить IP-адрес пользователя и использовать базу геолокации, чтобы угадать их местоположение на основе этого, как описано здесь: https://en.wikipedia.org/wiki/IP_address_location. Если вас интересует только регион, вы можете найти некоторые данные на региональных интернет-реестрах (https://en.wikipedia.org/wiki/Regional_Internet_registry), чтобы помочь вам, поскольку они контролируют все IP-адреса для определенного региона.

+0

Как бы вы справились с этой проблемой - если я нахожусь на своем домашнем wi-fi, мой IP-адрес - 192.168.x.x, и если я нахожусь в своей сотовой сети, мой IP-адрес 10.174.x.x? – soleil

+0

Вы правы, вы просто получите мусор для своего ip-адреса - это будет работать только в том случае, если вы являетесь веб-сайтом или чем-то еще. Я бы попробовал некоторые из ответов здесь, чтобы получить адрес самого маршрутизатора: http://stackoverflow.com/questions/2113580/objective-c-how-to-fetch-the-router-address?lq=1. –

+0

Ваш локальный IP-адрес (например: 192.168.x.x) отличается от вашего внешнего IP-адреса. Поэтому, если вы собираетесь использовать IP-адрес для получения местоположения пользователя, вам нужно получить его внешний IP-адрес. –

Смежные вопросы