Разница между didEnterRegion и didRangeBeacons

Какова точная разница между didEnterRegion и didRangeBeacons с точки зрения варианта использования, который я имею в виду, когда я должен реализовать didEnterRegion/didExitRegion и когда я должен реализовать didRangeBeacons?

Каковы точные функциональные возможности каждого метода делегата? Из документации Apple это не очень понятно.

- (void)locationManager:(CLLocationManager *)manager
         didEnterRegion:(CLRegion *)region
{
} 

А ТАКЖЕ

- (void)locationManager:(CLLocationManager *)manager
        didRangeBeacons:(NSArray *)beacons
               inRegion:(CLBeaconRegion *)region
{
}

2 ответа

Решение

didEnterRegion будет вызываться один раз, когда вы пересекаете порог региона (то есть обнаруживаете маяк). Как только вы выходите из региона (т.е. маяк больше не виден) didExitRegion будет вызван, а затем didEnterRegion будет вызван снова, если вы повторно введете регион.

didRangeBeacons вызывается повторно, в то время как маяки, которые вы выбираете, видны, давая вам обновленную информацию о близости.

Общая стратегия состоит в том, чтобы контролировать регионы маяка и один раз didEnterRegion называется, начинайте ранжировать этот маяк для обновлений, останавливая ранжирование один раз didExitRegion называется.

Смотрите также - Руководство по программированию местоположения

CLBeaconRegion определяется только UUID близости, или UUID близости и Major id могут соответствовать нескольким физическим маякам в вашем развертывании (я буду называть эти "частично определенные области" здесь).

didEnterRegion уведомляет, когда устройство впервые входит вблизи одного или нескольких маяков, которые соответствуют CLBeaconRegion, но не детализирует, какие соответствующие маяки находятся поблизости. didExitRegion вызывается только когда все соответствующие маяки выходят за пределы диапазона.

Существует два способа определения дальности маяков после ввода региона:

  1. Чтобы получить информацию о ближайших маяках, которые соответствуют частично квалифицированному региону.

Эта информация предоставляется didRangeBeacons как массив CLBeacon объекты. Обратите внимание, что набор маяков может меняться со временем, при этом устройство не покидает регион и не получает didExitRegion (пока хотя бы один соответствующий маяк находится в пределах диапазона, устройство находится в регионе). Это означает, что приложения, которые используют частично определенные области, но все еще заботятся о конкретных маяках, должны обрабатывать повторные вызовы didRangeBeacons,

  1. Чтобы получить информацию о близости, представленную в CLBeacon объекты.

Это может быть актуально, даже если используются полностью определенные регионы. Поскольку близость изменяется, когда устройство перемещается в пределах области, повторные вызовы didRangeBeacons должны быть обработаны.

Другие вопросы по тегам