Unity通过调用百度API获取当前IP所在地址

       最近项目需要定位,所以开始来研究Unity的定位,本来想用原生的sdk,但是谷歌被墙了那就没有办法了,接第三方的sdk又太麻烦,百度了一下正好可以通过百度地图API来获取当前IP的地址,不仅是百度地图,同时高德地图,腾讯地图等等也都有类似的API,此次我选择了百度地图,于是在查询了百度地图的相关接口后研究出功能,自学记录一下

       代码如下:

using Newtonsoft.Json;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.Net.NetworkInformation;


public class BaiduTest : MonoBehaviour {


    public Text province;
    public Text city;

    string url = "http://api.map.baidu.com/location/ip?ak=bretF4dm6W5gqjQAXuvP0NXW6FeesRXb&coor=bd09ll";
    string text;

    void Start()
    {
        StartCoroutine(Request());
    }

    // Update is called once per frame
    void Update()
    {

    }
    IEnumerator Request()
    {
        WWW www = new WWW(url);
        yield return www;

        if (string.IsNullOrEmpty(www.error))
        {
            Debug.Log(www.text);
            ResponseBody req = JsonConvert.DeserializeObject(www.text);
            Debug.Log("夭寿啦,调到地址啦!!!!!!");
            Debug.Log(req.content.address_detail.city);
            province.text = req.content.address_detail.province;
            city.text = req.content.address_detail.city;
        }
    }

}

public class ResponseBody
{

    public string address;
    public Content content;
    public int status;

}

public class Content
{
    public string address;
    public Address_Detail address_detail;
    public Point point;
}
public class Address_Detail
{
    public string city;
    public int city_code;
    public string district;
    public string province;
    public string street;
    public string street_number;
    public Address_Detail(string city, int city_code, string district, string province, string street, string street_number)
    {
        this.city = city;
        this.city_code = city_code;
        this.district = district;
        this.province = province;
        this.street = street;
        this.street_number = street_number;
    }
}
public class Point
{
    public string x;
    public string y;
    public Point(string x, string y)
    {
        this.x = x;
        this.y = y;
    }
}

 

       需要注意的是,需要引入Json解析,刚好有现成的插件,导入进去运行成功,不过稍有遗憾的是,我只定位到了省份和城市,不知道是不是IP的问题,通过此API调用IP地址的话精度不是太高,如果需要精度很高的定位的话,建议还是安装第三方SDK,调用的网址是"http://api.map.baidu.com/location/ip?ak=bretF4dm6W5gqjQAXuvP0NXW6FeesRXb&coor=bd09ll";  需要替换自己的AK的话将其中的bretF4dm6W5gqjQAXuvP0NXW6FeesRXb替换成自己的就可以了,具体调用百度地图API有详细解释,在这里就不多做介绍了,下面是我的工程文件,unity版本为5.3.6,在Editor和Android环境下都可以正常运行调用,里面还有些获取IP和调用安卓的代码,在此就不做介绍了。

 

       最后放一下工程文件的链接:  https://download.csdn.net/download/abc1090275833/10586792

你可能感兴趣的:(游戏开发,Unity)