Как ограничить использование ключа API часового пояса Google Maps для приложения Android?

Можно ли ограничить ключ API часового пояса для приложений Android?

Ключи Google Maps Android API и Google Places API могут быть ограничены определенными приложениями Android, указав имя пакета и хэш SHA-1.

Это работает без проблем для Maps and Places API, но при использовании тех же настроек для API часовых поясов постоянно возвращается "REQUEST_DENIED". Установка для ограничений приложения значения «Нет» приводит к успешному запросу, но я не хочу оставлять свой ключ API незащищенным.

Я вызываю API следующим образом:

double lat = 51.1789;
double lon = -1.8262;
long time = 1523092938; 
String Api_key = "#API_KEY#";

String query = "https://maps.googleapis.com/maps/api/timezone/json?location = "+String.format(Locale.ROOT, "%.4f",lat)+","+String.format(Locale.ROOT, "%.4f",lon)+"&timestamp = "+time+"&key = "+ Api_key;

protected JSONObject doInBackground(String... params) {
        HttpURLConnection connection = null;
        BufferedReader reader = null;

        try {
            URL url = new URL(query);
            connection = (HttpURLConnection) url.openConnection();
            connection.setConnectTimeout(5000);
            connection.connect();

            System.out.println(query);


            InputStream stream = connection.getInputStream();

            reader = new BufferedReader(new InputStreamReader(stream));

            StringBuffer buffer = new StringBuffer();
            String line = "";

            while ((line = reader.readLine()) != null) {
                buffer.append(line+"\n");
                Log.d("Response: ", "> " + line);
            }
            return new JSONObject(buffer.toString());
        } catch (Exception e) {
            e.printStackTrace();
        }
}

Полученный ответ:

{
"errorMessage" : "This IP, site or mobile application is not authorized to use this API key. Request received from IP address XX.XX.XX.XX, with empty referer",
"status" : "REQUEST_DENIED"
}

Если я установлю ограничение приложения на Нет, все будет работать:

{
"dstOffset" : 3600,
"rawOffset" : 0,
"status" : "OK",
"timeZoneId" : "Europe/London",
"timeZoneName" : "British Summer Time"
}
5
0
370
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я обнаружил, что это, по сути, та же проблема, что описана здесь: Android Google Maps Direction Api - ограничение ключа API не работает

Короче говоря, Google Maps Android API - это веб-сервис, и единственные ключевые ограничения API, которые работают, - это ограничения IP (ограничения приложений работают только для Android API).

Таким образом, у вас осталось только одно решение: реализовать промежуточный сервер, который получает запросы от вашего приложения, запрашивает Google API и отвечает на ваше приложение, передавая ответ Google API. Таким образом можно ограничить ключ API IP-адресом промежуточных серверов.

Однако как вы ограничиваете доступ к своему промежуточному серверу от третьих лиц - это вопрос сам по себе.

Спасибо за ответ, очень странная ситуация, надеюсь, Google исправит это

walkmn 11.11.2019 13:07

Другие вопросы по теме