确定iPhone用户的国家/地区

时间:2010-06-15 07:40:18

标签: iphone geolocation reverse-geocoding

我需要在启动时确定用户所在的国家/地区,以及iPhone应用程序。据推测,我将不得不打开位置服务并进行某种反向地理编码。如果可能的话,我真的不想使用第三方网络服务,是否有任何其他建议来确定服务提供的位置?

最初,我只需要检查用户是否在美国境内,但是将来可能会更改以添加更多国家/地区。我知道无法始终确定位置或用户可能已关闭位置服务。基本上,我只需要知道用户是否被检测到是在美国境内,以便关闭特定功能。

编辑:在进一步阅读时,看起来MKReverseGeocoder将成为可行的方式,除了我不想在我的应用程序中显示任何地图,这意味着我不允许使用它。

5 个答案:

答案 0 :(得分:34)

您可以尝试的另一个技巧是检查运营商的MCC

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

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

答案 1 :(得分:23)

NSLocale *locale = [NSLocale currentLocale];
NSString *countryCode = [locale objectForKey: NSLocaleCountryCode];

NSString *countryName = [locale displayNameForKey: NSLocaleCountryCode
                         value: countryCode];

答案 2 :(得分:4)

鉴于MKReverseGeocoder的限制,对我来说,实现目标的唯一可行方法是使用第三方服务来执行反向地理编码。我选择使用GeoNames,因为它们似乎是标准选择。

答案 3 :(得分:2)

NSLocale对象(例如[NSLocale systemLocale], and [NSLocale autoupdatingCurrentLocale]返回)包含值NSLocaleCountryCode。请在Apple文档中查看。

答案 4 :(得分:1)

如果您不想使用iPhone SDK提供的Google服务,那么您是否只能存储美国A边界的坐标并检查您是否在其中?

这是一个相关问题 How can I determine whether a 2D Point is within a Polygon?

如果限制的目的不是用户体验(例如,为了强制执行某些特定的美国法律),即当用户无法被激活时,我会说你需要更严格的检查(之后)所有,用户只是不允许使用位置服务,否则他/她不会?)。

一种这样的方法是进行IP查找,例如http://www.maxmind.com/app/geoip_country