如果说用户没有给我位置权限,那么我如何检测用户在欧洲?
愿这对您有所帮助:
使用当前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 的地理定位服务,例如此服务。
您需要做的就是执行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地址,例如在这里
缺点是,如果用户通过VPN连接到互联网,您将无法获得准确的结果。