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

时间:2014-05-22 07:00:27

标签: ios objective-c location locale

因此,原始要求是在应用程序启动时,移动应用程序将精确地将用户的当前位置提供给City。基于城市,服务器/应用客户端将提供与城市相关的内容。

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

我已经在网上搜索了几个小时,并得到以下解决方案的摘要,我需要你的帮助来决定哪一个可能是我最好的选择,或者你还有其他更好的选择。

使用[NSlocale autoupdatingCurrentLocale]

缺点:

  • a。对来自apple的文档的调用返回值的说明:"语言环境是由当前用户选择的系统语言环境的设置形成的,覆盖了用户的任何自定义设置已在“系统偏好设置”中指定。"从中我不明白用户在“系统偏好设置”中指定的自定义设置" reference link

  • 湾该值可能具有误导性,与用户当前的实际城市/国家无关。

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

获取当前的iPhone TimeZone

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

缺点:

  • 一个。与上面的项目b相同,因为用户始终可以指定而不是让系统自动更新时区。
  • 湾精确度得到谴责,只会列出首都。

评论:不是很有希望但很容易实现

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

缺点:

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

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

如果你知道的话,请给我任何想法或建议任何更好的解决方案。

非常感谢。

2 个答案:

答案 0 :(得分:1)

避免所有麻烦的预防措施是创建一个不会显得“不那么信任”并使用核心位置获取位置的应用。如果用户仍然不允许您的应用知道该位置并且知道他的城市是必须的,那么让他从可获得内容的城市列表中选择一个城市。当然,这开辟了一个巨大的漏洞,允许用于获取任何城市的内容。只有你可以决定这是否是一个可以接受的权衡,以便更简单的实施。

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

因此,最好使用GeoIP或某些此类服务对Web服务请求的IP地址进行反向地理编码。您可以在网上找到很多关于此的讨论和参考。

答案 1 :(得分:0)

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

可以使用IP。我快速搜索了一下,发现: -

  1. Find IP address in iphone

  2. how to get ip address of iphone programmatically

  3. 您可能希望从上面的链接中仔细阅读。

    我仍然认为使用核心位置是获取用户位置的最佳方式。

相关问题