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

Posted

技术标签:

【中文标题】如何在不使用核心位置服务的情况下获取用户当前的城市名称?【英文标题】:How to get the user's current city name without using the core location service? 【发布时间】:2014-07-11 01:55:14 【问题描述】:

所以最初的要求是在应用启动时,移动应用将用户当前的位置精确到城市。基于城市,服务器/应用客户端会给出城市相关的内容。

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

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

使用[NSlocale autoupdatingCurrentLocale]

缺点:

a.来自苹果文档的调用返回值的解释:“区域设置由当前用户选择的系统区域设置与用户在系统偏好设置中指定的任何自定义设置覆盖。”我不明白什么是“用户在系统偏好设置中指定的自定义设置” reference link

b.此值可能具有误导性,并且与用户当前的实际城市/国家完全无关。

cmets:如果有人能解释一下如何根据用户的设置更改语言环境,我将不胜感激。

获取当前的 iPhone 时区

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

缺点:

一个。与上面的 b 项相同,因为用户始终可以指定而不是让系统自动更新时区。 乙。精度受到影响,只会列出首都。

cmets:前景不大,但很容易实现

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

缺点:

一个。我从来没有实现过这样的东西,不知道这对于移动应用是否可行。 乙。就算有可能,也不知道是不是比核心定位服务快。

cmets:如果您知道 ios 应用可以这样做,请告诉我。

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

非常感谢。

【问题讨论】:

【参考方案1】:

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

如果您必须在没有核心位置的情况下自动知道城市,那么您提到的前两个选项“区域设置”和“时区”是无用的,因为它们中的每一个都包含大量城市。此外,正如您提到的,它们取决于用户的设置。

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

【讨论】:

【参考方案2】:

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

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

    Find IP address in iphone

    how to get ip address of iphone programmatically

您可能想好好阅读以上链接。

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

【讨论】:

以上是关于如何在不使用核心位置服务的情况下获取用户当前的城市名称?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在不启动核心定位的情况下向用户询问当前位置

在不显示提示信息的情况下,如何获取用户当前位置的经纬度

如何在不使用谷歌地图和其他地图的情况下获取用户当前位置?

MKUserTrackingButton - 如何在不缩小的情况下获取用户位置的中心地图?

html 在不使用任何付费服务的情况下获取用户的地理位置

在不提示的情况下在 Powershell 中获取当前用户的凭据对象