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:
Para una manera más fácil, pruebe la última implementación del archivo de configuración de GCM y cree fácilmente un proyecto utilizando su interfaz de desarrollador.