2015-09-21 22 views
1

我正在與Eddystone燈塔玩弄,並試圖註冊時撞牆。什麼是Eddystone AdvertisedId?

是自己購買的信標的供應商提供了一個應用程序,允許從信標讀取以下數據:

埃迪斯通-UID:

  • 名字空間:2F234454F4911BA9FFA6
  • 實例ID :1個
  • 電源位於0米測量:-20

iBeacon顯示/ ALTB eacon:

  • UUID:41f037b6-f49d-4379-8350-e209ea4eadd1
  • 專業:0
  • 輔修:1米處測得的1個
  • 功率:-61

鑑於這種信息,在使用Eddystone註冊信標時應該如何創建我的AdvertisedId?

謝謝!

回答

1

谷歌有一個示例Android應用程序,可以讓你註冊與他們的後端信標。你可以看到調用registerBeaconhere的代碼。

實際註冊過程的帖子JSON到谷歌的服務器,和JSON代來自com.google.sample.beaconservice.Beacon類在這個項目here.

如果你看一下這條線,你會看到,它的標識,從一個字節數組轉換至底座64與:

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

因此,對於一個埃迪斯通UID與0x010203040506070809 10字節的名稱空間和0x0a0b0c0d0e0f的6字節實例,則可以底座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); 
+0

這就是票!謝謝。 –

0

名稱空間和實例ID是您向Google註冊的內容。但是您顯示的名稱空間標識符無效。它必須是一個10字節(20個字符)的十六進制數字,並且顯示一個19個字符的標識符,其中包含一個「V」,這是一個十六進制數字的非法字符。這是一個錯字嗎?

+0

糟糕!是的,這是一個錯字。事實上,我也錯過了一個角色,正如你所指出的那樣。我已將「V」調整爲「B」,並在我的回覆中添加了第二個「2」。 –

+0

我想我的問題是「如何向Google註冊名稱空間和實例ID?」我看到很多關於轉換爲Base64的文檔,並且我知道它們的Proximity API的語法,但我不確定如何將命名空間和實例ID轉換爲AdvertisedId,作爲該語法的一部分。 –

0

語法爲eddystone namespace id+instanceid。 這是如何產生的廣告id

encodeBase64(HexToBinary(eddystone namespace id+instanceid))