Я должен определить при запуске, какая страна пользователь находится в для приложения для iPhone. По-видимому, я должен буду включить службы определения местоположения и сделать своего рода обратное геокодирование. Я действительно не хочу использовать сторонний веб-сервис, если это возможно, есть ли какие-либо другие предложения для определения страны от того, какие службы определения местоположения обеспечивает?
Первоначально, я только должен проверить, является ли пользователь в США или нет, но это может измениться в будущем для добавления большего количества стран. Я понимаю, что местоположение не может всегда определяться, или пользователю можно было выключить службы определения местоположения. В основном я просто должен знать, обнаруживается ли пользователь как являющийся в США для выключения определенной функции.
Править: На дополнительных материалах для чтения похоже, что MKReverseGeocoder был бы способом пойти, кроме я не хочу отображать любые карты в своем приложении, что означает, что мне не разрешают использовать это.
Учитывая ограничения MKReverseGeocoder, кажется, что единственный возможный способ достичь того, что я хочу, это использовать сторонний сервис для выполнения обратного геокода. Я выбрал GeoNames, поскольку они кажутся стандартным выбором.
Еще один трюк, который вы можете попробовать, это проверка носителя MCC:
#import <CoreTelephony/CTTelephonyNetworkInfo.h>
#import <CoreTelephony/CTCarrier.h>
CTTelephonyNetworkInfo *netInfo = [[CTTelephonyNetworkInfo alloc] init];
CTCarrier *carrier = [netInfo subscriberCellularProvider];
NSString *mcc = [carrier mobileCountryCode];
Объект NSLocale, например, возвращенный [NSLocale systemLocale] и
[NSLocale autoupdatingCurrentLocale] `), содержит значение NSLocaleCountryCode. Проверьте это в документации Apple.
Если вы не хотите использовать сервисы Google, предоставляемые iPhone SDK, не могли бы вы просто хранить координаты границ США и проверять, находитесь ли вы внутри этих границ?
Вот соответствующий вопрос в этом случае Как определить, находится ли двумерная точка внутри многоугольника?
Если целью ограничения является нечто иное, чем удобство пользователя (например, обеспечение соблюдения определенного закона США), т.е. когда пользователя невозможно поймать, я бы сказал, что вам нужна более строгая проверка (в конце концов, в противном случае пользователь просто запретит использование служб определения местоположения, не так ли?).
Одним из таких подходов может быть поиск по IP, например, http://www.maxmind.com/app/geoip_country
NSLocale *locale = [NSLocale currentLocale];
NSString *countryCode = [locale objectForKey: NSLocaleCountryCode];
NSString *countryName = [locale displayNameForKey: NSLocaleCountryCode
value: countryCode];