Я работал над прототипом приложения iOS, использующим iBeacons, чтобы предоставлять информацию о местоположении для сотрудников офиса в зависимости от того, где они находятся в офисе. Идеальный вариант использования заключается в том, что всякий раз, когда сотрудник входит или выходит из своего офиса, происходит обратный вызов, который предоставляет им некоторую информацию в форме уведомления (это может сделать запрос сервера для получения информации в первую очередь и т.д.). Мы также хотим, чтобы это было возможно, когда приложение было основано или завершено; к счастью, мы уже знаем, что пересечения границ области маяка инициируют соответствующие обратные вызовы CoreLocation, даже если приложение зашифровано или приостановлено.
От взгляда вокруг, я понимаю, что в целом у меня есть два варианта подхода к мониторингу зоны маяка:
- Предоставьте каждому iBeacon собственный CLBeaconRegion и независимо от монитора для каждой из этих областей.
- Монитор для CLBeaconRegions, который соответствует нескольким iBeacons - например, каждый iBeacon имеет тот же UUID и только монитор для CLBeaconRegion, соответствующий этому UUID, - затем попытайтесь определить, какой маяк инициировал пересечение границы с использованием ранжирования.
До сих пор я выбрал вариант №1. Преимущество этого подхода в том, что я получаю didEnterRegion: и didExitRegion: вызывает для каждого отдельного маяка и сразу же узнает, какой маяк я ввел/выходил. Кроме того, я получаю только один входящий вызов и один вызов выхода, который именно то, что я хочу. К сожалению, я просто понял, что этот подход также ограничивает меня 20 маяками (поскольку каждый маяк получает свой собственный регион).
Я не так хорошо знаком с точными деталями реализации №2, поэтому исправьте меня, если я ошибаюсь. Но похоже, что этот подход имеет больше недостатков:
- Apple обескураживает, когда приложение находится в фоновом режиме, потому что результаты могут быть не такими точными.
- Ранжирование звонков запускается раз в секунду, в то время как я хочу только иметь "входящие/исходящие" обратные вызовы.
- Если маяки имеют перекрытие области, вызовы ранжирования могут постоянно переворачиваться, что является "ближайшим", что еще больше усложнит ситуацию.
В принципе, мне интересно, есть ли способ использовать опцию № 2, но все еще имеют преимущества опции № 1 - быстрый и простой способ сразу определить, какой маяк вызвал изменение региона, только с одним входом или выходом Перезвони?
Надеюсь, этот вопрос достаточно ясен. Это не все полностью ясно в моей голове, особенно в том, как работает ранжирование.