通过 iPhone 的 IP 地址进行地理定位

Geolocation by iPhone's IP address

我喜欢使用设备的 IP 地址跟踪用户“位置”。

我已经在寻找一些 API 服务,例如:

但我不知道如何使用此服务来获取用户设备的位置。

实际上我已经寻找了一些 Swift 代码片段来获得想要的结果 (获取位置) 但我找不到任何代码与 Swift.

的当前版本匹配
let url = NSURL(string: "http://freegeoip.net")
    let task = URLSession.shared.dataTask(with: url! as URL) {(data, response, error) in
        let httpResponse = response as? HTTPURLResponse
        if (httpResponse != nil) {

        } else { }
    }; task.resume()

以上几行是我到目前为止的全部内容。但我真的希望有人能帮我解决这个问题。

您可以先尝试 http://ip-api.com/json,其中 returns 和 JSON 如 on their API page 所述。

然后您可以将此 JSON 字符串转换为字典并访问数据。

func getIpLocation(completion: @escaping(NSDictionary?, Error?) -> Void)
{
    let url     = URL(string: "http://ip-api.com/json")!
    var request = URLRequest(url: url)
    request.httpMethod = "GET"

    URLSession.shared.dataTask(with: request as URLRequest, completionHandler:
    { (data, response, error) in
        DispatchQueue.main.async
        {
            if let content = data
            {
                do
                {
                    if let object = try JSONSerialization.jsonObject(with: content, options: .allowFragments) as? NSDictionary
                    {
                        completion(object, error)
                    }
                    else
                    {
                        // TODO: Create custom error.
                        completion(nil, nil)
                    }
                }
                catch
                {
                    // TODO: Create custom error.
                    completion(nil, nil)
                }
            }
            else
            {
                completion(nil, error)
            }
        }
    }).resume()
}

此函数 returns 字典或错误(在您解决 TODO 之后)。 completion 在主线程上调用,假设您将使用结果更新 UI。如果没有,您可以删除 DispatchQueue.main.async { }.