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

所以原来的要求是,在应用程序的推出,移动应用程序将获得用户的当前位置精确到城市。 基于城市,服务器/应用程序客户端将给予城市相关的内容。

我知道,如果我可以使用核心定位服务(因为您知道可疑(自我关心)的用户通常会禁用不太信任的应用程序的位置服务),这不会太困难。

我已经在网上search了几个小时,并得到了以下解决scheme的摘要,我需要您的帮助来决定哪一个可能是我最好的select,或者如果您有其他更好的select。

使用[NSlocale autoupdatingCurrentLocale]

缺点:

  • a。苹果文档调用返回值的解释:“语言环境是由当前用户select的系统语言环境的设置形成的,覆盖了用户在”系统首选项“中指定的任何自定义设置。 我不明白什么是“用户在系统偏好设置中指定的自定义设置” 参考链接

  • 湾 这个值可能是误导的,与用户当前的实际城市/国家根本不相关。

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

获取当前的iPhone时区

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

缺点:

  • 一个。 与上面的b项相同,因为用户总是可以指定而不是让系统自动更新时区。
  • 湾 精确度被压缩,只有首都会被列出。

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

使用基于IP的位置检测Web服务基于我的阅读,这个过程将涉及应用程序发送请求到服务器,服务器将logging请求的IP (不要认为应用程序本身可以正确地获得自己的IP ,因为它可能在本地networking中)根据通过某些第三方服务(使用IP数据库或其他一些可用的API)logging的IP ,它会将城市信息返回给客户端。

缺点:

  • 一个。 我从来没有实现这样的事情,不知道是否可行的移动应用程序。
  • 湾 即使有可能,也不知道它是否比核心定位服务更快。

评论:如果你知道这是可能的iOS应用程序这样做,请让我知道。

如果您知道,请给我任何想法或build议更好的解决scheme。

非常感谢你。

避免所有麻烦的预防措施是创build一个不会出现“不那么信任”并使用核心位置来获取位置的应用程序。 如果用户仍然不允许您的应用程序知道位置,并且知道他的城市是必须的,那么让他从列表中select一个城市,然后select可用的城市。 当然,这会打开一个巨大的洞,允许用户获取任何城市的内容。 只有你可以决定这是否是一个可以接受的简单实施权衡。

如果您必须自动了解CITY而没有核心位置,您提到的前两个选项“locale”和“time zone”是无用的,因为它们每个都包含大量城市。 另外,正如你所提到的,他们依赖于用户的设置。

因此,使用GeoIP或某些此类服务对Web服务请求的IP地址进行反向地理编码是最佳select。 你可以在网上find很多讨论和参考资料。

NSlocale可能是非常不准确的。 我的同事从新西兰买了iPhone(他正在那里读书)。 当我testing他的电话以获取语言环境时,仍显示为新西兰英语。

使用IP是可能的。 我做了一个快速search,我发现:

  1. 在iphone中查找IP地址

  2. 如何获得iphone的IP地址编程

你可能想从上面的链接中读取一个好的阅读。

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