Разница между 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
вызывается только когда все соответствующие маяки выходят за пределы диапазона.
Существует два способа определения дальности маяков после ввода региона:
- Чтобы получить информацию о ближайших маяках, которые соответствуют частично квалифицированному региону.
Эта информация предоставляется didRangeBeacons
как массив CLBeacon
объекты. Обратите внимание, что набор маяков может меняться со временем, при этом устройство не покидает регион и не получает didExitRegion
(пока хотя бы один соответствующий маяк находится в пределах диапазона, устройство находится в регионе). Это означает, что приложения, которые используют частично определенные области, но все еще заботятся о конкретных маяках, должны обрабатывать повторные вызовы didRangeBeacons
,
- Чтобы получить информацию о близости, представленную в
CLBeacon
объекты.
Это может быть актуально, даже если используются полностью определенные регионы. Поскольку близость изменяется, когда устройство перемещается в пределах области, повторные вызовы didRangeBeacons
должны быть обработаны.