Определить страну пользователя iPhone - PullRequest
26 голосов
/ 15 июня 2010

Мне нужно при запуске определить, в какой стране находится пользователь, для приложения iPhone. Предположительно мне придется включить службы определения местоположения и выполнить какое-то обратное геокодирование. Я действительно не хочу использовать стороннюю веб-службу, если это возможно, есть ли другие предложения для определения страны, из которой предоставляются службы определения местоположения?

Изначально мне нужно только проверить, находится ли пользователь внутри США или нет, но это может измениться в будущем, чтобы добавить больше стран. Я понимаю, что местоположение не всегда может быть определено или у пользователя могут быть отключены службы определения местоположения. По сути, мне просто нужно знать, определен ли пользователь как находящийся внутри США, чтобы отключить определенную функцию.

РЕДАКТИРОВАТЬ: При дальнейшем чтении, похоже, что MKReverseGeocoder был бы подходящим вариантом, за исключением того, что я не хочу отображать какие-либо карты в моем приложении, что означает, что я не могу использовать это.

Ответы [ 5 ]

34 голосов
/ 15 июня 2010

Еще один трюк, который вы можете попробовать, это проверить MCC оператора

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

CTTelephonyNetworkInfo *netInfo = [[CTTelephonyNetworkInfo alloc] init];
CTCarrier *carrier = [netInfo subscriberCellularProvider];
NSString *mcc = [carrier mobileCountryCode];
.
23 голосов
/ 21 июня 2010
NSLocale *locale = [NSLocale currentLocale];
NSString *countryCode = [locale objectForKey: NSLocaleCountryCode];

NSString *countryName = [locale displayNameForKey: NSLocaleCountryCode
                         value: countryCode];
4 голосов
/ 21 июня 2010

Учитывая ограничения MKReverseGeocoder, для меня кажется, что единственный реальный способ достичь того, что мне нужно, - использовать сторонний сервис для выполнения обратного геокодирования.Я выбрал GeoNames , так как они кажутся стандартными.

2 голосов
/ 16 июня 2010

Объект NSLocale, например, возвращаемый [NSLocale systemLocale], and [NSLocale autoupdatingCurrentLocale] `), содержит значение NSLocaleCountryCode. Проверьте это в документации Apple.

1 голос
/ 15 июня 2010

Если вы не хотите использовать сервисы Google, предоставляемые iPhone SDK, не могли бы вы просто сохранить координаты границ США и проверить, находитесь ли вы внутри этого?

Вот соответствующий вопрос в этом случае Как определить, находится ли 2D-точка внутри многоугольника?

Если целью ограничения является что-то иное, чем взаимодействие с пользователем (например, чтобы навязать соучастие с каким-то определенным законодательством США), то есть когда пользователь не может быть перехвачен, я бы сказал, что вам нужна более тщательная проверка (после В противном случае пользователь просто запретил бы использование служб определения местоположения, не так ли?).

Одним из таких подходов будет поиск IP, например, http://www.maxmind.com/app/geoip_country

...