Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
确定iPhone用户';s国_Iphone_Geolocation_Reverse Geocoding - Fatal编程技术网

确定iPhone用户';s国

确定iPhone用户';s国,iphone,geolocation,reverse-geocoding,Iphone,Geolocation,Reverse Geocoding,对于iPhone应用程序,我需要在启动时确定用户所在的国家。大概我得打开定位服务,做一些反向地理编码。如果可能的话,我真的不想使用第三方web服务,有没有其他建议来确定位置服务提供的国家/地区 起初,我只需要检查用户是否在美国境内,但这可能会在未来发生变化,以添加更多的国家。我理解位置不能总是确定,或者用户可能关闭了位置服务。基本上,我只需要知道用户是否在美国境内被检测到,以便关闭特定功能 编辑:进一步阅读,看起来MkReverseGeoCode是一个不错的选择,但我不想在我的应用程序中显示任何

对于iPhone应用程序,我需要在启动时确定用户所在的国家。大概我得打开定位服务,做一些反向地理编码。如果可能的话,我真的不想使用第三方web服务,有没有其他建议来确定位置服务提供的国家/地区

起初,我只需要检查用户是否在美国境内,但这可能会在未来发生变化,以添加更多的国家。我理解位置不能总是确定,或者用户可能关闭了位置服务。基本上,我只需要知道用户是否在美国境内被检测到,以便关闭特定功能


编辑:进一步阅读,看起来MkReverseGeoCode是一个不错的选择,但我不想在我的应用程序中显示任何地图,这意味着我不允许使用它。

如果你不想使用iPhone SDK提供的谷歌服务,难道你不能储存美国边界的坐标,然后检查你是否在边界内吗

在这种情况下,这里有一个相关的问题

如果限制的目的不是用户体验(例如,强制执行某些特定的美国法律),即当用户无法被捆绑时,我会说您需要进行更严格的检查(毕竟,用户只会不允许使用定位服务,不是吗?)


其中一种方法是进行IP查找,例如,

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

#导入
#进口
CTTelephonyNetworkInfo*netInfo=[[CTTelephonyNetworkInfo alloc]init];
CTCarrier*carrier=[netInfo subscriberCellularProvider];
NSString*mcc=[载波移动国家码];

NSLocale对象(如由
[NSLocale systemLocale]和
[NSLocale AutoUpdateingCurrentLocale]`]返回)包含值NSLocaleCountryCode。查看苹果的文档。

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

目的是限制用户在美国境内时的功能。如果用户关闭了位置服务或发现他们在美国境外,则功能不受限制。我知道这很容易做到,但这些都是我的要求——更多的是功能受到限制,而不是每次都要求100%。我当然很乐意使用iPhone SDK提供的谷歌服务。有什么东西可以告诉我我想要什么吗?用户当然可以改变他们的语言环境?语言环境只是配置。这与实际位置无关。这是一个用户设置,是的,但在许多情况下,这是程序员想要的。例如,用户希望其日期、时间和货币格式保持为其首选区域设置,而不管其实际所在国家/地区。这取决于使用情况。苹果的文档称,
CTTelephonyNetworkInfo
只提供了提供SIM卡的运营商的信息。所以无论你是否漫游,这段代码都会给出相同的结果?好问题。我想是的……是的,这只提供SIM卡供应商所在国家的信息。无法检测当前国家/地区或漫游/非漫游。。。您必须将LocatoinServices与反向地理编码器一起使用才能做到这一点(注意,在某些情况下,运营商/用户最初禁用了数据漫游)。用户是否可以自行更改区域设置,从而使其变得不可靠?此外,区域设置与手机的“语言”设置相同还是不同?用户可以在“设置>常规>国际>区域格式”中更改此设置。有区域格式和语言设置。并非所有用户都使用真实的居住区域设置。应该小心使用。
NSLocale *locale = [NSLocale currentLocale];
NSString *countryCode = [locale objectForKey: NSLocaleCountryCode];

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

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