如何在不使用核心定位服务的情况下获取用户当前所在城市名称?

4
原始需求是,在启动应用程序时,移动应用程序将获取用户当前位置,精确到城市。根据城市,服务器/应用程序客户端将提供与城市相关的内容。
如果我能使用核心定位服务(因为您知道,可疑的(自我关注的)用户通常会禁用定位服务,以避免不太信任的应用程序),那么这不会太困难。
我已经在网上搜索了几个小时,并总结了以下解决方案,需要您的帮助来决定哪个是最佳选择,或者是否有其他更好的选择。
使用[NSlocale autoupdatingCurrentLocale]
缺点:
  • a. 苹果文档中对返回值的解释是:“该区域设置由当前用户选择的系统区域设置的设置与用户在“系统偏好设置”中指定的任何自定义设置叠加而成。” 我不理解“用户在“系统偏好设置”中指定的任何自定义设置”是什么意思。 参考链接

  • b. 这个值可能会误导,并且与用户实际所在的城市/国家无关。

评论:如果有人能够解释一下如何根据用户的设置来更改区域设置,我将不胜感激。

获取当前iPhone时区

NSTimeZone *localTime = [NSTimeZone systemTimeZone];
NSLog(@"Current local timezone  is  %@",[localTime name]); 

缺点:

  • a. 与上述b项相同,因为用户始终可以指定而不是让系统自动更新时区。
  • b. 精度受损,只列出首都城市。

评论:不是很有前途,但易于实现

使用基于IP的位置检测Web服务 根据我的阅读,该过程将涉及应用程序向服务器发送请求,服务器将记录请求的IP。(不认为从应用程序本身可以正确获取其自己的IP,因为它可能在本地网络中)基于通过某些第三方服务记录的IP(具有IP数据库或其他可用API),将返回城市信息回到客户端。

缺点:

  • a. 我从未实现过这样的事情,不知道对于移动应用程序是否可行。
  • b. 即使可能,也不知道它是否比核心位置服务更快。

评论:如果您知道iOS应用程序可以这样做,请告诉我。

请您提供任何想法或者更好的解决方案,如果您有的话。非常感谢您。
谢谢。
2个回答

2
为避免所有麻烦的预防措施是创建一个应用程序,该应用程序不会显得“不太可信”,并使用核心位置来获取位置。如果用户仍然不允许您的应用程序了解位置,并且知道他的城市是必须的,请让他从可用内容列表中选择一个城市。当然,这打开了一个巨大的漏洞,使我们能够获取任何城市的内容。只有您可以决定是否接受这种简化实现的权衡。
如果必须在没有核心位置的情况下自动知道城市,则您提到的前两个选项“locale”和“time zone”都无用,因为每个选项都包含大量城市。此外,正如您所提到的,它们依赖于用户的设置。
因此,使用GeoIP或类似服务的Web服务请求的IP地址进行反向地理编码是最好的选择。您可以在网络上找到大量有关此问题的讨论和参考资料。

0

NSlocale 可能会非常不准确。我的同事在新西兰购买了 iPhone(他在那里学习)。当我测试他的手机以获取语言环境时,它仍然显示为新西兰英语。

使用 IP 是可能的。我进行了快速搜索,发现以下内容:

  1. 在 iPhone 中查找 IP 地址

  2. 如何以编程方式获取 iPhone 的 IP 地址

您可能需要从上面的链接中仔细阅读。

我仍然认为使用 Core Location 是获取用户位置的最佳方法。


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