1

我在玩一个 Eddystone 信标,并在尝试注册它时撞到了墙。

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

Eddystone-UID:

  • 命名空间:2F234454F4911BA9FFA6
  • 实例 ID:1
  • 0米处测得的功率:-20

iBeacon/AltBeacon:

  • UUID:41f037b6-f49d-4379-8350-e209ea4eadd1
  • 专业:0
  • 未成年人:1
  • 1米处测得的功率:-61

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

谢谢!

4

3 回答 3

2

Google 有一个示例 Android 应用程序,可让您在其后端注册信标。registerBeacon 您可以在此处查看调用的代码。

实际注册过程将 JSON 发布到 Google 的服务器上,而 JSON 的生成来自这里com.google.sample.beaconservice.Beacon这个项目中的类

如果您查看该行,您将看到它将标识符从字节数组转换为 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);
于 2015-09-23T17:12:17.740 回答
0

命名空间和实例 ID 是您向 Google 注册的内容。但是您显示的命名空间标识符无效。它必须是一个 10 字节(20 个字符)的十六进制数,并且您显示的是一个 19 个字符的标识符,其中带有“V”,这是十六进制数的非法字符。这是一个错字吗?

于 2015-09-21T02:58:26.590 回答
0

语法是eddystone namespace id+instanceid. 这是生成广告的方法id

encodeBase64(HexToBinary(eddystone namespace id+instanceid))

于 2015-11-18T01:25:21.843 回答