iOS: обнаружение маяков занимает много времени

У меня есть приложение, в котором я сканирую маяки (я знаю UIID) и отображаю их. Первые несколько раз, когда я запускал его, я почти сразу нашел маяки. Но теперь каждый раз, когда я его запускаю, кажется, что их обнаружение занимает все больше и больше времени. Хотя у меня маяки стоят на столе рядом с устройством.

Я пытался заменить батареи, перейти с iPhone на iPad, проверить приложение для сканирования маяков на Mac, переустановить приложение и т. д. У меня также есть ряд разных маяков от разных производителей, и все они, похоже, имеют одно и то же. проблема. Кажется, это ничего не исправит.

Мой код в основном выглядит так:

let locationManager = CLLocationManager()
locationManager.delegate = self
let region = CLBeaconRegion(proximityUUID: UUID(uuidString:"61687109-905F-4436-91F8-E602F514C96D")!, identifier: "BlueCat beacon")
locationManager.startMonitoring(for: region)

И тогда я могу ждать до 5 или более минут, прежде чем какой-либо из методов делегата получит вызов.

Это первый раз, когда я пытался использовать маяки. Это нормально? Может ли устройство долго видеть маяк?


person drekka    schedule 27.09.2016    source источник


Ответы (1)


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

Есть много вещей, которые могут вызвать задержки в обнаружении маяков при мониторинге, и трудно сказать наверняка, не зная, как именно вы тестируете. Два совета:

  1. Слоты для аппаратных фильтров на устройствах iOS ограничены и предоставляются в порядке очереди. Если у вас установлено несколько приложений-маяков, которые занимают эти слоты (или если ваше приложение зарегистрировало несколько регионов), все эти слоты могут быть заняты. После того, как слоты аппаратного фильтра исчезнут, обнаружение вернется к сканированию программного обеспечения, которое происходит примерно каждые 15 минут. Удалите все приложения (включая ваше), которые могут занимать эти слоты, а затем переустановите только свое приложение.

  2. Убедитесь, что вы не находитесь "в регионе", когда переводите приложение в фоновый режим. Если iOS полагает, что оно находится в этом регионе, вы не получите новый обратный вызов didEnterRegion до тех пор, пока он не поймет, что он вышел. области, а затем снова вошли. Время, необходимое для того, чтобы iOS осознала, что вышла из региона, намного больше, чем время, необходимое для осознания того, что она вошла. Чтобы гарантировать, что оно осознает, что оно покинуло регион, вы всегда должны искать маяки, когда приложение находится на переднем плане, и оставлять приложение на переднем плане примерно на минуту, чтобы убедиться, что iOS понимает, что оно больше не находится в регионе (обычно это занимает 30 секунд). секунд дальности, чтобы вызвать выход.) Только тогда вы должны перевести его в фоновый режим и включить маяк для измерения времени обнаружения.

person davidgyoung    schedule 27.09.2016