如果说用户没有给我位置许可,那我怎么能检测到用户在欧洲?
答案 0 :(得分:0)
这可以帮到你:
使用当前TimeZone
(或尝试Locale)。它将给出(靠近)时区,由用户为其设备日期时间设置。
目标C:
NSTimeZone *timeZone = [NSTimeZone localTimeZone];
NSString *timeZoneName = [timeZone name];
NSLog(@"timeZoneName - %@",timeZoneName);
NSLocale *locale = [NSLocale currentLocale];
NSString *countryCode = [locale objectForKey: NSLocaleCountryCode];
NSLog(@"countryCode - %@",countryCode);
Swift 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)
答案 1 :(得分:0)
检查Locale
对您没有多大好处,因为它只反映了您设备的设置,而不是物理位置。
如果您被拒绝了位置服务,我认为最好的解决方法是使用免费的基于IP的地理定位服务,例如this one。
您需要做的就是向GET
http://ip-api.com/json/{ipAddress}
请求
示例:
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连接到互联网,您将无法获得准确的结果。