什么是 Eddystone AdvertisedId?

What is the Eddystone AdvertisedId?

我正在玩 Eddystone 信标,在尝试注册时遇到了麻烦。

我购买的信标供应商提供了一个应用程序,可让您从信标读取以下数据:

Eddystone-UID:

iBeacon/AltBeacon:

鉴于此信息,在使用 Eddystone 注册信标时,我应该使用什么来创建我的 AdvertisedId?

谢谢!

名称空间和实例 ID 是您注册的 Google。但是您显示的命名空间标识符无效。它必须是一个 10 字节(20 个字符)的十六进制数,并且您显示的是一个包含 "V" 的 19 个字符标识符,这是十六进制数的非法字符。这是错字吗?

Google 有一个示例 Android 应用程序,可让您在其后端注册信标。可以看到调用registerBeaconhere.

的代码

实际注册过程是将JSON投递到Google的服务器,JSON代来自本项目com.google.sample.beaconservice.Beaconclasshere.

如果您查看该行,您会发现它将标识符从字节数组转换为 base 64,其中:

JSONObject advertisedId = new JSONObject()
    .put("type", type)
    .put("id", Utils.base64Encode(id));

因此,对于具有 0x010203040506070809 的 10 字节命名空间和 0x0a0b0c0d0e0f 的 6 字节实例的 Eddystone UID,您可以像这样对标识符进行 base 64 编码:

byte[] eddystoneBeaconId = new byte[] {(byte) 0x01, (byte) 0x02, (byte) 0x03, (byte) 0x04, (byte) 0x05, (byte) 0x06, (byte) 0x07, (byte) 0x08, (byte) 0x09, (byte) 0x01a (byte) 0x0b, (byte) 0x0c, (byte) 0x0d, (byte) 0x0e, (byte) 0x0f };
String base64EncodedEddystoneBeaconId = android.util.Base64.encodeToString(id, android.util.Base64.DEFAULT);

语法为eddystone namespace id+instanceid。 这是如何生成广告 id:

encodeBase64(HexToBinary(eddystone namespace id+instanceid))