AdvertisedId id 字节长度无效
Invalid AdvertisedId id bytes length
我正在尝试在 OAuth2.0 Playground 上注册我的信标。当我尝试注册我的信标时,出现以下错误:
{ "error": {
"status": "INVALID_ARGUMENT",
"message": "Invalid AdvertisedId id bytes length",
"code": 400 }
}
我正在向 https://proximitybeacon.googleapis.com/v1beta1/beacons:register
发送 POST
请求,正文如下 application/json
:
{
"advertisedId": {
"type": "EDDYSTONE",
"id": "ZWRkMWViXWFjMDRlNWRlZmEwNTdkMGU3ZDAwMmQ4YmM="
},
"status": "ACTIVE",
}
我正在通过这个计算 advertiseID
的信标:
InstanceID
: e61bdd5c2a9a
Namespace:
edd1ebfac04e5defa017
我正在通过这种方法创建 advertiseId
:
[1] 连接 Namespace+Instance
。 => edd1ebfac04e5defa017e61bdd5c2a9a
[2] 使用以下代码将其转换为字节流:
byte[] message = "edd1ebfac04e5defa017e61bdd5c2a9a".getBytes(StandardCharsets.UTF_8);
[3] 然后使用以下代码将其转换为 Base64
:
String encoded = Base64.getEncoder().encodeToString(message);
现在 encoded
是我们的 advertisedId
即 ZWRkMWViXWFjMDRlNWRlZmEwNTdkMGU3ZDAwMmQ4YmM=
谁能帮帮我?
在信标 ID 的十六进制值与这些值的实际基础二进制值之间进行转换时,这是一个相当常见的问题。
base64字符串"ZWRkMWViXWFjMDRlNWRlZmEwNTdkMGU3ZDAwMmQ4YmM="
其实就是text十六进制字符串"edd1ebfac04e5defa017e61bdd5c2a9a"
的base64编码。但是你真正需要做的是对这个十六进制字符串下面的 binary 值进行 base64 编码。
在Node.jS中,例如:
var b = Buffer("edd1ebfac04e5defa017e61bdd5c2a9a", "hex");
b.length;
> 16 bytes // The 32 char string above represents 16 bytes!
b.toString("base64");
> '7dHr+sBOXe+gF+Yb3Vwqmg=='
b.toString("base64").length;
> 24
因此,如您所见,您应该得到一个长度大约为 24 个字节的 base64 字符串。
因此,您的转换函数应遵循以下几行:
String convertHexBeaconIDToAdvertisementID(String hex) {
byte[] bytes = ByteString.decodeHex(hex).toByteArray();
return Base64.getEncoder().encodeToString(bytes);
}
如果有人需要 java 中的完整工作示例 :),
import java.util.Base64;
import javax.xml.bind.DatatypeConverter;
public class Eddystone{
public static byte[] toByteArray(String s) {
return DatatypeConverter.parseHexBinary(s);
}
public static String convertHexBeaconIDToAdvertisementID(String hex) {
byte[] encoded = toByteArray(hex);
return Base64.getEncoder().encodeToString(encoded);
}
public static void main(String[] args){
System.out.println("Base64 Eddystone AdvertisementID: " +
convertHexBeaconIDToAdvertisementID("edd1ebfac04e5defa017e61bdd5c2a9a"));
}
}
我正在尝试在 OAuth2.0 Playground 上注册我的信标。当我尝试注册我的信标时,出现以下错误:
{ "error": {
"status": "INVALID_ARGUMENT",
"message": "Invalid AdvertisedId id bytes length",
"code": 400 }
}
我正在向 https://proximitybeacon.googleapis.com/v1beta1/beacons:register
发送 POST
请求,正文如下 application/json
:
{
"advertisedId": {
"type": "EDDYSTONE",
"id": "ZWRkMWViXWFjMDRlNWRlZmEwNTdkMGU3ZDAwMmQ4YmM="
},
"status": "ACTIVE",
}
我正在通过这个计算 advertiseID
的信标:
InstanceID
: e61bdd5c2a9a
Namespace:
edd1ebfac04e5defa017
我正在通过这种方法创建 advertiseId
:
[1] 连接 Namespace+Instance
。 => edd1ebfac04e5defa017e61bdd5c2a9a
[2] 使用以下代码将其转换为字节流:
byte[] message = "edd1ebfac04e5defa017e61bdd5c2a9a".getBytes(StandardCharsets.UTF_8);
[3] 然后使用以下代码将其转换为 Base64
:
String encoded = Base64.getEncoder().encodeToString(message);
现在 encoded
是我们的 advertisedId
即 ZWRkMWViXWFjMDRlNWRlZmEwNTdkMGU3ZDAwMmQ4YmM=
谁能帮帮我?
在信标 ID 的十六进制值与这些值的实际基础二进制值之间进行转换时,这是一个相当常见的问题。
base64字符串"ZWRkMWViXWFjMDRlNWRlZmEwNTdkMGU3ZDAwMmQ4YmM="
其实就是text十六进制字符串"edd1ebfac04e5defa017e61bdd5c2a9a"
的base64编码。但是你真正需要做的是对这个十六进制字符串下面的 binary 值进行 base64 编码。
在Node.jS中,例如:
var b = Buffer("edd1ebfac04e5defa017e61bdd5c2a9a", "hex");
b.length;
> 16 bytes // The 32 char string above represents 16 bytes!
b.toString("base64");
> '7dHr+sBOXe+gF+Yb3Vwqmg=='
b.toString("base64").length;
> 24
因此,如您所见,您应该得到一个长度大约为 24 个字节的 base64 字符串。
因此,您的转换函数应遵循以下几行:
String convertHexBeaconIDToAdvertisementID(String hex) {
byte[] bytes = ByteString.decodeHex(hex).toByteArray();
return Base64.getEncoder().encodeToString(bytes);
}
如果有人需要 java 中的完整工作示例 :),
import java.util.Base64;
import javax.xml.bind.DatatypeConverter;
public class Eddystone{
public static byte[] toByteArray(String s) {
return DatatypeConverter.parseHexBinary(s);
}
public static String convertHexBeaconIDToAdvertisementID(String hex) {
byte[] encoded = toByteArray(hex);
return Base64.getEncoder().encodeToString(encoded);
}
public static void main(String[] args){
System.out.println("Base64 Eddystone AdvertisementID: " +
convertHexBeaconIDToAdvertisementID("edd1ebfac04e5defa017e61bdd5c2a9a"));
}
}