确定iPhone用户的国家

27

我需要在 iPhone 应用程序启动时确定用户所在的国家。可能需要打开位置服务并进行某种形式的反向地理编码。如果可能,我不想使用第三方网络服务,是否有其他建议可以从位置服务提供的信息中确定国家?

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

编辑:进一步阅读后,似乎 MKReverseGeocoder 是一种可行的方法,但我不希望在我的应用程序中显示任何地图,这意味着我不能使用此方式。

5个回答

35

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

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

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

6
苹果的文档说明CTTelephonyNetworkInfo仅提供有关提供SIM卡的运营商的信息。因此,这段代码无论您是在漫游还是非漫游状态下使用,都会提供相同的结果? - phoenies
好问题。我想是这样的... - MonsieurDart
1
是的,这只提供了有关SIM卡供应商所在国家的信息。它无法检测当前国家或漫游/非漫游...你必须使用Reverse Geocoder的LocatoinServices来完成这项任务(需要注意的是,在某些情况下,运营商/用户最初会禁用数据漫游)。 - igraczech

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

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

用户可以自己更改语言环境,这会使其变得不可靠吗?此外,语言环境与手机的“语言”设置是相同还是不同的? - Andy A
1
这可以在“设置”>“通用”>“国际”>“地区格式”中由用户更改。有一个地区格式和语言设置。 - MonsieurDart
并非所有用户都使用真实的居住地。应谨慎使用。 - AlexeyVMP

4

考虑到MKReverseGeocoder的限制,似乎唯一可行的方法是使用第三方服务进行反向地理编码。我选择使用GeoNames,因为他们似乎是标准选择。


2

NSLocale对象(例如由[NSLocale systemLocale][NSLocale autoupdatingCurrentLocale]返回)包含值NSLocaleCountryCode。在苹果文档中查看。


用户肯定可以更改他们的语言环境吧? - Ben Williams
Locale 只是配置,与实际位置无关。 - Eran Goldin
这是一个用户设置,但在许多情况下,这正是程序员所期望的。例如,用户希望其日期、时间和货币格式设置保持为其首选语言环境,而不管她身处哪个国家。这取决于使用情况。 - Drew C

1

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

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

如果限制的目的与用户体验无关(例如,为了强制执行某些特定的美国法律),即当用户不可信时,我会说您需要进行一些更严格的检查(毕竟,否则用户将简单地禁止使用位置服务,对吧?)。

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


目的是在用户被发现在美国境内时限制功能。如果用户关闭了位置服务或者被发现在美国境外,功能将不受限制。我知道这很容易被规避,但这是我所要求的要求——更多的是希望限制功能而不是100%每次都要求限制。 - Ben Williams
我很乐意使用iPhone SDK提供的Google服务。有什么可以满足我的需求吗? - Ben Williams

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接