信标ID不适用于“ client.getForObserved”

时间:2018-07-18 15:00:56

标签: beacon eddystone id

我试图从库libproximitybecon创建一个对象作为功能“ getforObserved”的输入。该对象的创建是通过函数“ getObservedBody”完成的,但字段“ id”无效: 我遇到此错误:未处理的信标服务响应:Response {protocol = h2,code = 400,message =,url = ...“

JSONObject object = new JSONObject();
try {
  object=getObservedBody(beacon.getId(),"*");
} catch (JSONException e) {
  e.printStackTrace();
}
Log.i(TAG,object.toString());
client.getForObserved(getBeaconCallback,object,"AIzaSyAOH0j4JgZxZTa7XTAYpPZBGCFxJEkVyGU");

private JSONObject getObservedBody(byte[] advertisement, String namespace)
      throws JSONException {
//byte[] a = Arrays.copyOfRange(advertisement, 2, 18);
int packetLength = 16;

//String id =Utils.base64Encode(advertisement).toString();
int offset = advertisement.length - packetLength;
String id = Base64.encodeToString(advertisement,
       offset, packetLength, Base64.NO_WRAP);


Log.i(TAG,"actualID:  "+id);
Log.i(TAG,"from adv:  "+advertisement);
return new JSONObject()
        .put("observations", new JSONArray()
                .put(new JSONObject()
                        .put("advertisedId", new JSONObject()
                                .put("type", "EDDYSTONE")
                                .put("id", id)
                        )
                )
        )
        .put("namespacedTypes", new JSONArray()
                .put(namespace)
        );
}

}

1 个答案:

答案 0 :(得分:0)

使用您发布到服务器的JSON格式不正确,Google拒绝了它并发送了400响应。尽管看不到代码为Base64编码并作为id字段发送的字节数组beacon.getId()的内容,但我看不到任何明显错误的内容。这可能代表无效的Eddystone实例标识符。

我将通过以下方式开始调试:

  1. 将字节数组beacon.getId()转换为十六进制字符串并记录下来。
  2. 将您的JSON对象转换为字符串并进行记录。

完成上述操作后,如果仍然没有发现明显的问题,请将这两个问题的结果添加到您的问题中。