Близость режима мониторинга iBeacon для региона маяка
У меня есть вопрос об iBeacons в режиме мониторинга. Я хочу взаимодействовать с уведомлением, отправляемым пользователю, если устройство находится в 1-2 м от маяка.
Раньше была функция с именем:
var radius: CLLocationDistance { get }
Сейчас это устарело, так что нет возможности установить диапазон области маяка. Таким образом, различные состояния внутри, снаружи, неизвестно не могут быть настроены. Большинство радиомаяков дальнего действия имеют область более 60 м, что делает этот регион большим для любого взаимодействия в вашем доме.
Что мне нужно было сделать, так это понизить мощность чипа BLE, который я использовал с помощью AT-команд, до -4 Гц. Теперь пролет составляет около 3-4 м, что немного лучше, чем я хочу. Я пробовал жестяные банки, чтобы еще больше снизить сигнал, но это не имеет большого значения. Даже оловянная фольга вокруг чипа BLE.
Кто-нибудь нашел способ указать регион маяка? Близость должна иметь внутреннюю область для запуска с помощью этой функции:
func locationManager(_ manager: CLLocationManager, didDetermineState state: CLRegionState, for beaconRegion: CLRegion){}
Режим ранжирования не работает в сочетании с мониторингом, поэтому я не могу использовать близость, которая в противном случае была бы решением.
func update(distance: CLProximity) {}
1 ответ
Несколько моментов:
Вы правы, что не можете установить диапазон для мониторинга радиомаяка.
radius
Поле никогда не было предназначено для мониторинга маяков, а скорее для геозон, так что никогда не работало, чтобы делать то, что вы хотите.Уменьшение мощности передатчика, как правило, ненадежно, потому что, как вы видели, вы не можете достаточно хорошо контролировать расстояние срабатывания, и это приводит к большой разнице в расстоянии, где происходит срабатывание.
Ранжирование работает в сочетании с мониторингом, с некоторыми ограничениями, так что это лучший метод для достижения желаемого.
Я описал метод более подробно в своем ответе на этот связанный вопрос.