簡體   English   中英

通過iPhone的IP地址進行地理位置定位

[英]Geolocation by iPhone's IP address

我喜歡通過使用設備的IP地址來跟蹤用戶的“ 位置 ”。

我已經在尋找一些API服務,例如:

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

但是我不知道如何使用此服務來獲取用戶設備的位置。

實際上,我已經在尋找一些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 ,它會返回一個JSON,如其API頁面所述

然后,您可以將此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()
}

此函數返回字典或錯誤(在您解決TODO之后)。 假設您將使用結果更新UI,則在主線程上調用completion 如果沒有,則可以刪除DispatchQueue.main.async { }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM