如何检测用户(iOS设备)在欧洲?

时间:2018-05-18 08:46:13

标签: ios objective-c location

如果说用户没有给我位置许可,那我怎么能检测到用户在欧洲?

2 个答案:

答案 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连接到互联网,您将无法获得准确的结果。