26

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

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

编辑:在进一步阅读中,看起来 MKReverseGeocoder 将是要走的路,除了我不希望在我的应用程序中显示任何地图,这意味着我不允许使用它。

4

5 回答 5

35

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

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

CTTelephonyNetworkInfo *netInfo = [[CTTelephonyNetworkInfo alloc] init];
CTCarrier *carrier = [netInfo subscriberCellularProvider];
NSString *mcc = [carrier mobileCountryCode];
于 2010-06-15T11:30:28.700 回答
23
NSLocale *locale = [NSLocale currentLocale];
NSString *countryCode = [locale objectForKey: NSLocaleCountryCode];

NSString *countryName = [locale displayNameForKey: NSLocaleCountryCode
                         value: countryCode];
于 2010-06-21T09:54:43.230 回答
4

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

于 2010-06-21T07:17:57.843 回答
2

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

于 2010-06-16T02:44:03.963 回答
1

如果你不想使用iPhone SDK提供的谷歌服务,你不能只存储美国A边界的坐标并检查你是否在里面吗?

在这种情况下,这是一个相关问题 如何确定 2D 点是否在多边形内?

如果限制的目的不是用户体验(例如,强制遵守某些特定的美国法律),即当用户不能被信任时,我会说你需要一些更严格的检查(毕竟,否则用户会简单地禁止使用位置服务,不是吗?)。

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

于 2010-06-15T09:41:04.003 回答