我需要在启动时确定用户所在的国家/地区,以及iPhone应用程序。据推测,我将不得不打开位置服务并进行某种反向地理编码。如果可能的话,我真的不想使用第三方网络服务,是否有任何其他建议来确定服务提供的位置?
最初,我只需要检查用户是否在美国境内,但是将来可能会更改以添加更多国家/地区。我知道无法始终确定位置或用户可能已关闭位置服务。基本上,我只需要知道用户是否被检测到是在美国境内,以便关闭特定功能。
编辑:在进一步阅读时,看起来MKReverseGeocoder将成为可行的方式,除了我不想在我的应用程序中显示任何地图,这意味着我不允许使用它。
答案 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