Попытка зарегистрировать Estimote iBeacon с API Proximity Beacon

У меня есть Estimote Beacon, который находится в режиме iBeacon. Раньше я пытался зарегистрировать Edddystone, и мне это удалось. Теперь я пытаюсь зарегистрировать его с помощью Google Proximity Beacon API. Но он выдает сообщение об ошибке, поскольку длина байтов Invalid AdvertisedId id id.

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

Я хочу знать, как анализировать запись сканирования, чтобы длина AdvertisedId была правильной. Если есть какие-либо другие изменения, которые я должен сделать, дайте мне знать.


person Community    schedule 09.10.2015    source источник
comment
Можете ли вы показать код, который вы использовали, который ранее был успешным?   -  person davidgyoung    schedule 09.10.2015
comment
Я просто использовал образец приложения, найденный по этой ссылке github.com/google/. маяк-платформа/дерево/мастер/образцы/андроид   -  person    schedule 09.10.2015
comment
С помощью этого кода я мог бы добавлять вложения. Затем я проанализировал пакеты iBeacon и попытался зарегистрироваться в них, но не смог этого сделать.   -  person    schedule 09.10.2015
comment
Возможный дубликат Google Proximity Beacon API: как зарегистрировать iBeacon?   -  person Louis CAD    schedule 10.08.2016


Ответы (2)


Вы передаете AdvertisedId в виде строки необработанных байтов в кодировке Base64? Обратите внимание на эту часть в документации Proximity API для AdvertisedId:

Кодировка base64 должна представлять собой двоичный поток байтов, а не любое его текстовое (например, шестнадцатеричное) представление.

Вот как получить такую ​​строку с помощью интерактивного интерпретатора Ruby:

irb(main):039:0> uuid = 'B9407F30-F5F8-466E-AFF9-25556B57FE6D'
=> "B9407F30-F5F8-466E-AFF9-25556B57FE6D"
irb(main):040:0> major = 123
=> 123
irb(main):041:0> minor = 456
=> 456
irb(main):047:0> raw_bytes = [uuid.gsub('-', ''), major, minor].pack('H*SS')
=> "\xB9@\x7F0\xF5\xF8Fn\xAF\xF9%UkW\xFEm{\x00\xC8\x01"
irb(main):048:0> require 'base64'
=> true
irb(main):049:0> Base64.encode64(raw_bytes).strip
=> "uUB/MPX4Rm6v+SVVa1f+bXsAyAE="

Эта последняя строка - это то, что вам нужно передать.

person heypiotr    schedule 09.10.2015

Проверьте, действителен ли ваш идентификатор. Идентификатор рекламного идентификатора будет состоять из 20 байтов iBeacon UUID + major + minor base64, закодированных непосредственно из двоичной формы.

person Jas    schedule 09.10.2015