Доступны ли основные/младшие значения iBeacon при мониторинге региона?

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

практическое правило Apple использует один и тот же UUID для всех мои физические местоположения:

UUID используется всеми местоположениями.

Это позволяет устройству iOS использовать единый идентификатор для распознавания любого из магазинов с одним регионом.

Затем каждому конкретному магазину в Сан-Франциско, Париже и Лондоне присваивается уникальное основное значение, позволяющее устройству определить, в каком конкретном магазине оно находится.

Я нашел вызов установки региона с заданным UUID, но не нашел, какой объект возвращается при обнаружении UUID и какие поля возвращаются.

Откуда приложение получает значение major/minor, когда iOS обнаруживает маяк с заданным UUID?


person Adam Matan    schedule 18.01.2016    source источник


Ответы (1)


При использовании API-интерфейсов мониторинга вы получаете только объект CLBeaconRegion в обратном вызове входа/выхода из CoreLocation. Область маяка, определяемая этим классом, обычно представляет не отдельные маяки, а диапазон маяков на основе идентификаторов подстановочных знаков.

Из-за этого, если вы используете подстановочные знаки в определении вашего региона (как это обычно бывает), вы фактически не можете видеть, какой конкретный маяк инициировал запись региона. Чтобы решить эту проблему, вы должны объединить оба одновременный мониторинг и ранжирование API. Если вы выполняете мониторинг и диапазон одновременно, CoreLocation выдаст вам обратный вызов в методе didRangeBeacons beacons: [CLBeacon] inRegion region: CLBeaconRegion с массивом всех CLBeacon объектов, которые он видел.

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

Так как вам нужно фоновое обнаружение, важно, чтобы вы выполняли оба действия одновременно. Даже если вы ничего не помещаете в свой обратный вызов мониторинга из-за отсутствия конкретной информации о маяке, вам нужно выполнять мониторинг только для того, чтобы ваше приложение проснулось в фоновом режиме при обнаружении нового маяка. Затем вы будете получать различные обратные вызовы в течение примерно 10 секунд, прежде чем ваше приложение снова будет приостановлено.

person davidgyoung    schedule 18.01.2016