0

我设法使用接近 API 成功注册了一个信标,并且可以在列出活动信标时看到它,但是我无法使用更新方法修改信标信息。

这里是注册成功的包装

{
  "beaconName": "beacons/3!6564643165626561653336383637373435326335",
  "advertisedId": {
    "type": "EDDYSTONE",
    "id": "ZWRkMWViZWFlMzY4Njc3NDUyYzU="
  },
  "status": "ACTIVE",
  "latLng": {
    "latitude": <removed>,
    "longitude": <removed>
  }
}

这是列表操作 GET https://proximitybeacon.googleapis.com/v1beta1/beacons的结果

{
  "beacons": [
    {
      "beaconName": "beacons/3!6564643165626561653336383637373435326335",
      "advertisedId": {
        "type": "EDDYSTONE",
        "id": "ZWRkMWViZWFlMzY4Njc3NDUyYzU="
      },
      "status": "ACTIVE",
      "latLng": {
        "latitude": <removed>,
        "longitude": <removed>
      }
    }
  ]
}

但是尝试调用 PUT 进行更新给了我 400 PUT /v1beta1/beacons/3%216564643165626561653336383637373435326335

{
  "error": {
    "code": 400,
    "message": "Invalid JSON payload received. Unknown name \"{  \"status\": \"ACTIVE\",  \"latLng\": {    \"latitude\": <removed>,    \"longitude\": <removed>  }}\": Cannot bind query parameter. Field '{  \"status\": \"ACTIVE\",  \"latLng\": {    \"latitude\": -35' could not be found in request message.",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.BadRequest",
        "fieldViolations": [
          {
            "description": "Invalid JSON payload received. Unknown name \"{  \"status\": \"ACTIVE\",  \"latLng\": {    \"latitude\": <removed>,    \"longitude\": <removed>  }}\": Cannot bind query parameter. Field '{  \"status\": \"ACTIVE\",  \"latLng\": {    \"latitude\": -35' could not be found in request message."
          }
        ]
      }
    ]
  }
}

数据包本身非常简单

{
  "status":"ACTIVE",
  "latLng": {
    "latitude": <removed>,
    "longitude": <removed>
  },
  "indoorLevel": {
    "name": "4"
  },
  "status": "PORTABLE"
}

不完全确定错误的原因是什么以及如何解决。

4

2 回答 2

2

自己的问题回答了。如果您在使用 curl 时忘记传入“Content-Type: application/json”的标头,则会出现此错误。

于 2015-08-09T06:47:42.157 回答
0

是的,那个应用程序/json 错误消息不是很有帮助(¬_¬)。

另一个问题:您的 beaconID 有问题。我猜你手动输入了“6564643165626561653336383637373435326335”,因为它是 40 个字符,而不是 32 个,Eddystone beaconID 应该是。即使这样,base64 beaconID 也不正确。如果您对其进行解码,那么您将获得一个 10 字节(20 个字符)的信标 ID。

我们已经在其他问题中看到了一些带有不正确信标 ID 的问题。

确保在对它们进行编码时,您使用的是 16 字节的 BINARY 数据和 base64 编码,而不是 32 字节的十六进制表示。

于 2015-09-09T13:49:43.453 回答