我设法使用感应API成功注册了一个信标,并且在列出活动信标时可以看到它,但是我无法使用更新方法修改信标信息。
这是成功注册的
{
"beaconName": "beacons/3!6564643165626561653336383637373435326335",
"advertisedId": {
"type": "EDDYSTONE",
"id": "ZWRkMWViZWFlMzY4Njc3NDUyYzU="
},
"status": "ACTIVE",
"latLng": {
"latitude": <removed>,
"longitude": <removed>
}
}
这是列表操作的结果 获取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"
}
不完全确定错误的原因是什么以及如何解决。
答案 0 :(得分:2)
自己回答的问题。如果您在使用curl时忘记传入“Content-Type:application / json”标题,则会出现此错误。
答案 1 :(得分:0)
是的,那个application / json错误消息并不是非常有用(¬_¬)。
另一个问题:你的beaconID有问题。我猜你用手写入了“6564643165626561653336383637373435326335”,因为它是40个字符,而不是32,这是Eddystone beaconID应该是的。即使这样,base64 beaconID也不正确。如果你解码它,那么你得到一个10字节(20个字符)的beaconID。
我们在other questions中看到了一些错误的beaconID问题。
确保对它们进行编码时,您采用的是16字节的BINARY数据和base64编码,而不是32字节的十六进制表示。