Ответ 1
Вы должны использовать API-интерфейс для получения местоположения с использованием ip.
Я разрабатываю приложение для Android. Я хочу определить местоположение устройства, используя его IP-адрес. С чего начать? Ссылки на API Google недостаточно убедительны. Спасибо.
Вы должны использовать API-интерфейс для получения местоположения с использованием ip.
Оформить заказ API геолокации Google Maps
Пример POST:
https://www.googleapis.com/geolocation/v1/geolocate?key=YOUR_API_KEY
Пример ответа:
{
"location": {
"lat": 51.0,
"lng": -0.1
},
"accuracy": 1200.4
}
Ограничения:
Пользователи стандартного API:
2500 бесплатных запросов в день 10 запросов в секунду, для каждого пользователя Включите оплату с оплатой по мере необходимости, чтобы разблокировать более высокие квоты:
$0.50 USD/1000 дополнительных запросов, до 100 000 в день.
Существует несколько веб-сервисов, которые предоставляют вам значение широты и долготы с IP-адреса.
один такой api.ipinfodb.com
для ex, вы можете определить широту и долготу, отправив запрос, например
http://api.ipinfodb.com/v3/ip-city/?key=<your_api_key>
&ip=74.125.45.100&format=json
это возвращает данные в формате json, и вы можете получить ответ в XML, установив format = xml. (вам нужно зарегистрироваться, чтобы получить ключ API).
или вы можете загрузить базу данных из this и this ссылка.
вы можете загружать наборы данных, но у вас постоянно его обновлять.
Я использую этот, чтобы получить ip, страну и город устройства
чтобы проверить, вы можете использовать RESTCLIENT, аддон Firefox для запросов HTTP.
просто скопируйте https://addons.mozilla.org/en-us/firefox/addon/restclient/ этот URL-адрес и протестируйте его в RESTCLIENT или просто в адресной строке браузера
Надеюсь, это поможет!
Вы можете использовать freegeoip.net.
Это бесплатный сервис с открытым исходным кодом. Вы можете использовать услугу напрямую или запустить ее на своем личном сервере. Он также может легко развертываться в Heroku.
Чтобы получить IP-адрес, просто используйте OkHttp для отправки запроса http/https:
String url = "https://freegeoip.net/json/"
Request mRequest = new Request.Builder()
.url(url)
.build();
Context mContext // A UI context
new OkHttpClient().newCall(mRequest).enqueue(new Callback() {
Handler mainHandler = new Handler(mContext.getApplicationContext().getMainLooper());
@Override
public void onResponse(Call call, Response response) {
String responseBody = null;
try {
responseBody = response.body().string();
} catch (final IOException e) {
mainHandler.post(new Runnable() {
@Override
public void run() {
// handle error
}
});
}
final String finalResponseBody = responseBody;
mainHandler.post(new Runnable() {
@Override
public void run() {
// handle response body
try {
JSONObject locationObject = new JSONObject(finalResponseBody);
} catch (JSONException e) {
e.printStackTrace();
}
}
});
}
@Override
public void onFailure(Call call, final IOException e) {
mainHandler.post(new Runnable() {
@Override
public void run() {
mNetworkListener.onNetworkError(e.getMessage());
}
});
}
});
И ответ будет выглядеть примерно так:
{
"ip": "192.30.253.113",
"country_code": "US",
"country_name": "United States",
"region_code": "CA",
"region_name": "California",
"city": "San Francisco",
"zip_code": "94107",
"time_zone": "America/Los_Angeles",
"latitude": 37.7697,
"longitude": -122.3933,
"metro_code": 807
}