Что такое Eddystone AdvertisedId?

Я дурачусь с маяком Eddystone и наткнулся на стену, пытаясь зарегистрировать его.

Поставщик маяка, который я купил, предоставляет приложение, которое позволяет вам считывать следующие данные с маяка:

Eddystone-UID:

  • Пространство имен: 2F234454F4911BA9FFA6
  • Идентификатор экземпляра: 1
  • Мощность, измеренная на 0 метров: -20

iBeacon/AltBeacon:

  • UUID: 41f037b6-f49d-4379-8350-e209ea4eadd1
  • Майор: 0
  • Минор: 1
  • Мощность, измеренная на 1 метре: -61

Учитывая эту информацию, что я должен использовать для создания своего AdvertisedId при регистрации маяка с помощью Eddystone?

Спасибо!


person avgrammer    schedule 21.09.2015    source источник


Ответы (3)


У Google есть пример приложения для Android, которое позволит вам зарегистрировать маяки в их бэкэнде. Вы можете увидеть код, который вызывает registerBeacon здесь.

Фактический процесс регистрации отправляет JSON на серверы Google, а генерация JSON происходит из класса com.google.sample.beaconservice.Beacon в этом проекте здесь.

Если вы посмотрите на эту строку, вы увидите, что она преобразует идентификатор из массива байтов в базу 64 с помощью:

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

Таким образом, для UID Eddystone с 10-байтовым пространством имен 0x010203040506070809 и 6-байтовым экземпляром 0x0a0b0c0d0e0f вы можете кодировать идентификаторы по основанию 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);
person davidgyoung    schedule 23.09.2015
comment
Это билет! Спасибо. - person avgrammer; 24.09.2015

Пространство имен и идентификатор экземпляра — это то, что вы регистрируете в Google. Но показанный вами идентификатор пространства имен недействителен. Это должен быть 10-байтовый (20-символьный) шестнадцатеричный номер, и вы показываете 19-символьный идентификатор с буквой «V» в нем, что является недопустимым символом для шестнадцатеричного числа. Это опечатка?

person davidgyoung    schedule 21.09.2015
comment
Ой! Да, это была опечатка. На самом деле, я тоже пропустил персонажа, как вы указали. Я изменил V на B и добавил вторые 2 в свой ответ. - person avgrammer; 22.09.2015
comment
Я полагаю, мой вопрос заключается в том, как зарегистрировать пространство имен и идентификатор экземпляра в Google? Я вижу много документации по преобразованию в Base64 и знаю синтаксис их API-интерфейса Proximity, но я точно не знаю, как превратить пространство имен и идентификатор экземпляра в AdvertisedId как часть этого синтаксиса. - person avgrammer; 22.09.2015

Синтаксис eddystone namespace id+instanceid. Вот как сгенерировать рекламируемый id:

encodeBase64(HexToBinary(eddystone namespace id+instanceid))

person Sarvesh Pai    schedule 18.11.2015