Google Proximity Beacon API: как зарегистрировать iBeacon?

Документация Google Proximity Beacon API везде использует Eddystone в качестве примера:

https://developers.google.com/beacons/proximity/register

Однако в документации упоминаются еще два типа маяков: AltBeacon и iBeacon.

Если я правильно понимаю, следует использовать что-то вроде этого (адаптировано из примера Google):

 {
  "advertisedId": {
   "type":"IBEACON",
   "id":"base 64 of what???"},
  "status":"ACTIVE",
  "latLng": {
     "latitude": 51.4935657,
     "longitude": -0.1465538
   }
}

Однако каков приемлемый двоичный формат для UUID,Major,Minor iBeacon (который должен быть base64)?


person Roman Susi    schedule 23.07.2015    source источник
comment
Хороший вопрос. Вы пытались объединить UUID/major/minor (с пробелами, запятыми или символами подчеркивания) и кодировку Base64?   -  person davidgyoung    schedule 23.07.2015
comment
Согласно документам, он должен быть двоичным (байты), поэтому пробелы и т. д. не могут быть и речи. Нет, я еще не пробовал. Этот вопрос в надежде, что кто-то знает. Я опубликую ответ, если / когда я узнаю.   -  person Roman Susi    schedule 23.07.2015


Ответы (1)


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

В противном случае ваш запрос выглядит правильно!

person MarcWan    schedule 28.07.2015
comment
Не могли бы вы объяснить немного подробнее? Я тестирую этот API на игровой площадке OAuth, поэтому мне нужно предоставить текст запроса. Как мне перейти от наличия UUID, старшего и младшего к байтам, которые вы упомянули? - person Mathijs; 19.08.2015
comment
Мальчик, это будет немного сложно через игровую площадку — вам нужно будет получить UUID iBeacon, старший + младший, а затем объединить их все, преобразовать их в двоичные файлы, а затем получить результаты в формате base64. Лучше всего сделать это с помощью небольшого скрипта PHP или Node. - person MarcWan; 19.08.2015
comment
Хорошо, я могу попробовать это. Спасибо! Итак, concat без пробелов и разделителей? Как 9D07149D23D54B30BA5A5214346460AF111222 для старшего 111 и младшего 222? Откуда Google знает, что старший номер не 1112, а младший 22? - person Mathijs; 20.08.2015
comment
Опять же, двоичный, поэтому 20 байтов: первые 16 из которых являются ibeacon uuid (двоичные значения), а последние 4 из которых являются старшими/младшими. Apple определяет мажор и минор по 16 бит каждый. Если у вас есть двоичный буфер, вы кодируете его в base64. Итак, для вашего примера ваш UUID (в шестнадцатеричном формате) 9D07149D23D54B30BA5A5214346460AF, а ваш основной/младший 0x6f и 0xde (111 и 222). объединив их, вы получите: 9D07149D23D54B30BA5A5214346460AF006F00DE. Преобразуйте в двоичный файл, затем в base64, вы получите: 'nQcUnSPVSzC6WlIUNGRgrwBvAN4=' - person MarcWan; 20.08.2015
comment
@Mathijs в основном, когда вы регистрируете свой маяк, вы указываете тип регистрируемого маяка. Таким образом, API-интерфейс близости должен знать, как выбрать основные второстепенные значения из информации о маяке! Надеюсь это поможет. - person Mr.Noob; 27.10.2015