【发布时间】:2018-10-28 15:45:51
【问题描述】:
如果说用户没有给我位置权限,那么我如何检测到用户在欧洲?
【问题讨论】:
-
使用语言环境......
-
这不是那个帖子的骗子。这里的海报特别说他们没有位置许可,其他帖子有。我有同样的问题,这可能与 GDPR 有关。
-
是的,它与 GDPR 相关
标签: ios objective-c location
如果说用户没有给我位置权限,那么我如何检测到用户在欧洲?
【问题讨论】:
标签: ios objective-c location
希望对您有所帮助:
使用当前的TimeZone(或尝试区域设置)。它将提供(附近)时区,由用户为其设备日期时间设置。
目标 C:
NSTimeZone *timeZone = [NSTimeZone localTimeZone];
NSString *timeZoneName = [timeZone name];
NSLog(@"timeZoneName - %@",timeZoneName);
NSLocale *locale = [NSLocale currentLocale];
NSString *countryCode = [locale objectForKey: NSLocaleCountryCode];
NSLog(@"countryCode - %@",countryCode);
斯威夫特 4:
let name = TimeZone.current
print("TimeZone name - \(name)")
// TimeZone name - Asia/Kolkata (current)
let currentlocale = Locale.current
print("currentlocale - \(currentlocale)")
// currentlocale - en_IN (current)
let regioncode = Locale(identifier: currentlocale.regionCode!)
print("regioncode - \(regioncode)")
// regioncode - in (fixed)
【讨论】:
检查Locale 对你没有多大好处,因为它只反映你设备的设置,而不是物理位置。
如果您被拒绝提供定位服务,我认为最好的解决方法是使用免费的基于 IP 的地理定位服务,例如 this one。
您需要做的就是向http://ip-api.com/json/{ipAddress} 执行GET 请求
例子:
GET http://ip-api.com/json/8.8.8.8 (google-public-dns-a.google.com) 返回json
{
"as": "AS15169 Google LLC",
"city": "Mountain View",
"country": "United States",
"countryCode": "US",
"isp": "Google",
"lat": 37.4229,
"lon": -122.085,
"org": "Google",
"query": "8.8.8.8",
"region": "CA",
"regionName": "California",
"status": "success",
"timezone": "America/Los_Angeles",
"zip": ""
}
如您所见,它会返回一堆有用的信息,例如国家名称或国家代码。
你可以很容易地找到如何在 Objective-c 中获取设备的 IP 地址,例如here
缺点是如果用户通过 VPN 连接到互联网,您将无法获得准确的结果。
【讨论】: