首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iPhone IP地址的地理定位

iPhone IP地址的地理定位
EN

Stack Overflow用户
提问于 2018-01-30 21:30:11
回答 1查看 4.1K关注 0票数 5

我喜欢通过使用设备的IP地址来跟踪用户的"location“。

我已经查找了一些API服务,如:

  • freegeoip.net
  • api.petabyet.com
  • ip-api.com

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

实际上,我已经寻找了一些Swift代码片段来获得想要的结果(以获得位置),但是我找不到任何与Swift当前版本相匹配的代码。

代码语言:javascript
复制
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()

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-30 21:35:04

您可以从尝试http://ip-api.com/json开始,它返回在他们的API页面上解释的JSON。

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

代码语言:javascript
复制
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()
}

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

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48530829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档