簡體   English   中英

無效的AdvertisedId id字節長度

[英]Invalid AdvertisedId id bytes length

我正在嘗試在OAuth2.0 Playground上注冊我的信標。 當我嘗試注冊我的信標時,它給我以下錯誤:

{   "error": {
"status": "INVALID_ARGUMENT", 
"message": "Invalid AdvertisedId id bytes length", 
"code": 400   } 
}

我正在將POST請求發送到https://proximitybeacon.googleapis.com/v1beta1/beacons:register向以下application/json主體注冊:

 {
  "advertisedId": {
    "type": "EDDYSTONE",
    "id": "ZWRkMWViXWFjMDRlNWRlZmEwNTdkMGU3ZDAwMmQ4YmM="
  },
  "status": "ACTIVE",
}

我正在以此計算信標的advertiseID

InstanceID e61bdd5c2a9ae61bdd5c2a9a

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=

誰能幫我?

如果有人需要使用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"));
    }
}

在信標ID的十六進制值與這些值的實際基礎二進制值之間進行轉換時,這是一個相當普遍的問題。

base64字符串"ZWRkMWViXWFjMDRlNWRlZmEwNTdkMGU3ZDAwMmQ4YmM="實際上是文本十六進制字符串"edd1ebfac04e5defa017e61bdd5c2a9a"的base64編碼。 但是,您真正需要做的是對這個十六進制字符串下面的二進制值進行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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM