java android google-places-api

java - SOLICITUD DENEGADA con la CLAVE API de Google Places para Web Server utilizada en una aplicaciĆ³n de Android



google-places-api (3)

De la documentación:

Nota: Necesita una clave de API de Android, no una clave de navegador. Puede usar la misma clave de API para sus aplicaciones de Android Maps v2 de Google Maps y su API de Google Places para aplicaciones de Android.

Mira this para más ayuda.

Estoy tratando de obtener información de la API de Google Places para una aplicación de Android. Para hacer eso, primero he habilitado esta API en mi cuenta de Google.

En segundo lugar, he creado una CLAVE API para el navegador. Ya tengo un servidor API KEY debido a otra API.

Por lo tanto, en mi código he sido probado con estas dos claves y con ambas ¡siempre tengo el mismo resultado!

{

"error_message": "Este servicio requiere una clave API",

"html_attributions": [],

"resultados": [],

"status": "REQUEST_DENIED"

}

El código que estoy usando para hacer la llamada es ...

@Override protected String doInBackground(LocationService... ls) { JSONObject result = new JSONObject(); URL url; HttpsURLConnection urlConnection; // Making HTTP request try { //Define connection url = new URL("https://maps.googleapis.com/maps/api/place/nearbysearch/json"); urlConnection = (HttpsURLConnection)url.openConnection(); urlConnection.setRequestMethod("POST"); urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); urlConnection.setRequestProperty("charset", "utf-8"); urlConnection.setRequestProperty("Accept", "application/json"); urlConnection.setDoOutput(true); urlConnection.setDoInput(true); urlConnection.setUseCaches(false); //Send data String parameters = "?location=" + String.valueOf(ls[0].getLocation().getLatitude()) + "," + String.valueOf(ls[0].getLocation().getLongitude()); parameters+="&radius=5000"; parameters+="&types=restaurant|health|city_hall|gas_station|shopping_mall|grocery_or_supermarket"; parameters+="&sensor=false"; parameters+="&key=" + Constants.API_KEY_BROWSER_APPLICATIONS; byte[] postData = parameters.getBytes(Charset.forName("UTF-8")); int postDataLength = postData.length; urlConnection.setRequestProperty("Content-Length", Integer.toString(postDataLength)); DataOutputStream data = new DataOutputStream(urlConnection.getOutputStream()); data.write(postData); data.flush(); data.close(); Log.d(TAG, "Datos enviados"); Log.d(TAG, "ResponseCode: " + String.valueOf(urlConnection.getResponseCode())); //Display what returns POST request StringBuilder sb = new StringBuilder(); int HttpResult = urlConnection.getResponseCode(); if(HttpResult == HttpURLConnection.HTTP_OK){ String json; BufferedReader br = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(),"utf-8")); String line; while ((line = br.readLine()) != null) { sb.append(line + "/n"); } br.close(); //System.out.println(""+sb.toString()); Log.d(TAG, "json: " + sb.toString()); FileService file = new FileService(); file.writeLog(POIActivity.TAG, getClass().getName(), POIActivity.urlConnection + parameters); file.writeLog(POIActivity.TAG, "doInBackground", sb.toString()); // Parse the String to a JSON Object result = new JSONObject(sb.toString()); }else{ //System.out.println(urlConnection.getResponseMessage()); Log.d(TAG, "urlConnection.getResponseMessage(): " + urlConnection.getResponseMessage()); result = null; } } catch (UnsupportedEncodingException e) { e.printStackTrace(); Log.d(TAG, "UnsuppoertedEncodingException: " + e.toString()); } catch (JSONException e) { e.printStackTrace(); Log.d(TAG, "Error JSONException: " + e.toString()); } catch (IOException e) { e.printStackTrace(); Log.d(TAG, "IOException: " + e.toString()); } // Return JSON Object return result.toString(); }

Cuando hago la llamada a la API, tengo como ResponseCode = 200 y la llamada que construyo finalmente es así ...

https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=38.26790166666667,-0.7052183333333333&radius=5000&types=restaurant|health|city_hall|gas_station|shopping_mall|grocery_or_supermarket&sensor=false&key=API_KEY

Recuerde, como API_KEY, he usado tanto Api Key para aplicaciones de servidor como Api Key para aplicaciones de navegador y obtuve el mismo resultado con ambas.

Sinceramente, estoy desesperado con este problema porque no sé qué estoy haciendo mal.


El problema es que no está utilizando la Google Places API for Android , está utilizando el Google Places API Web Service .

Here hay un ejemplo del uso de la Google Places API for Android , y here hay un ejemplo del uso del Google Places API Web Service . Definitivamente estás usando este último.

Habilite el Google Places API Web Service y funcionará:

Si accede a este enlace mientras inicia sesión en su cuenta de Google Cloud Console: https://console.cloud.google.com/apis/library?filter=category:maps

Esta es la API que debe habilitarse: