Почему метод beaconinfo.getforobserved из Proximity Beacon API возвращает неверный запрос (код ответа = 400)? - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь получить вложения от маяков, зарегистрированных в моем проекте консоли разработчика Google с API_KEY.Как описано в Proximity Beacon API, запрос можно сделать, просто используя ключ API и отправив тело в запросе POST.Я сделал все, что показано ниже.1) Метод выполнения http-запроса:

 public String getAttachments(String beaconname, String account,String data) {

    //beacon name =  beacons/3!....
    //acountname = emailused;
   //data = json body

    String token = null;

    String SCOPE = "oauth2:https://www.googleapis.com/auth/userlocation.beacon.registry";

    String result = null;


    try {

        token = GoogleAuthUtil.getToken(getActivity(), account, SCOPE);
        Log.w("Token", token);
    } catch (IOException e) {
        e.printStackTrace();
    } catch (GoogleAuthException e) {
        e.printStackTrace();
    }
    BufferedReader bufferedReader = null;
    HttpURLConnection httpURLConnection = null;
    try {
        URL url = new URL("https://proximitybeacon.googleapis.com/v1beta1/beaconinfo:getforobserved?key="+API_KEY);
        Log.w("URL", url.toString());


        httpURLConnection = (HttpURLConnection) url.openConnection();
        httpURLConnection.setRequestMethod("POST");
        httpURLConnection.setRequestProperty("Content-Type", "application/json; charset=utf-8");
        httpURLConnection.setRequestProperty("Accept","application/json");
        httpURLConnection.setRequestProperty("Authorization", "Bearer " + token);
        httpURLConnection.setDoOutput(true);
        httpURLConnection.setDoInput(true);


        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(httpURLConnection.getOutputStream(),"UTF-8"));

        writer.write(data);
        writer.flush();
        writer.close();
        Log.w("data sent",data);


        int resposnecode = httpURLConnection.getResponseCode();
        String responsemessage = httpURLConnection.getResponseMessage();
        Log.e("Response code", resposnecode + "");
        Log.e("Response message",responsemessage);

        bufferedReader = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream(),"UTF-8"));
        String line = null;
        StringBuilder builder = new StringBuilder();
        while ((line = bufferedReader.readLine()) != null) {
            builder.append(line);
        }

        result = builder.toString();


    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {

        try {
            httpURLConnection.disconnect();
            bufferedReader.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    return result;
}

Тело (параметр данных, использованный в вышеуказанном методе), которое я отправляю с этим почтовым запросом, выглядит так:

 { "observations":[  
  {  
     "advertisedId":{  
        "type":"EDDYSTONE",
        "id":"vv8QICkg/0QBAwASb9z/Ug=="
     },
     "timestampMs":"2018-11-20T10:31:02.972000000Z"
  }],"namespacedTypes":[  
  "true-bla-020202/Bye"]} 

Я получаюНеверный запрос с кодом 400 в качестве ответа.У маяка есть два приложения в приборной панели маяка с пространством имен, упомянутым в теле сообщения POST.Я пытаюсь это изо дня в день безуспешно.

...