java opening_hours PEDIDO NEGADO com a CHAVE da API do Google Places para servidor Web usada em um aplicativo Android




places autocomplete api (3)

Estou tentando obter informações da API do Google Places para um aplicativo Android. Para fazer isso, primeiro ativei esta API na minha Conta do Google.

Segundo, eu criei uma API KEY for Browser. Eu já tenho um servidor API KEY devido a outra API.

Então, no meu código, eu fui testado com essas duas chaves e, com as duas, tenho sempre o mesmo resultado !!!

{

"error_message": "Este serviço requer uma chave de API.",

"html_attributions": [],

"resultados" : [],

"status": "REQUEST_DENIED"

}

O código que estou usando para fazer a chamada é ...

        @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();


    }

Quando faço a chamada para a API, tenho como ResponseCode = 200 e a chamada que eu construo é finalmente assim ...

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

Lembre-se, como API_KEY, usei o Api Key para aplicativos de servidor e o Api Key para aplicativos de navegador e obtive o mesmo resultado com ambos.

Atenciosamente, estou desesperado com esse problema porque não sei o que estou fazendo de errado !!!



A partir da documentação:

Nota: Você precisa de uma chave da API do Android, não de um navegador. Você pode usar a mesma chave de API para seus aplicativos da API Android do Google Maps v2 e seus aplicativos da API do Google Places para Android.

Verifique this para obter mais ajuda.


O problema é que você não está usando a Google Places API for Android do Google Places API for Android , o Google Places API Web Service do Google Places API Web Service .

Here está um exemplo de como usar a Google Places API for Android e um exemplo de como usar o Google Places API Web Service do Google Places API Web Service . Você definitivamente está usando o último.

Ative o Google Places API Web Service do Google Places API Web Service e ele funcionará:

Se você acessar este link enquanto estiver conectado à sua conta do Google Cloud Console: https://console.cloud.google.com/apis/library?filter=category:maps

Esta é a API que deve ser ativada:







google-places-api