StartMonitoringForRegion не срабатывает didEnterRegion и didExitRegion

Я делаю некоторые тесты, используя оценочные маяки и регионы.

Чтение документации по мере того, как я запускаю мониторинг региона. Я расскажу своему делегату о том, что определенный регион отслеживается, однако didEnterRegion и didExitRegion никогда не запускаются.

Мой делегат стреляет:

-(void)beaconManager:(ESTBeaconManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(ESTBeaconRegion *)region

и

- (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region

Я не проверял, возникает ли ошибка в locationManager:didFailWithError:

В настоящее время я использую состояние для ручного запуска двух частных методов, которые работают как didEnter и didExit - в этом случае я также могу отслеживать регион, но я не понял почему locationManager:didEnterRegion: и locationManager:didExitRegion: никогда не вызываются.

Кто-то сталкивается с таким же поведением?

Ответ 1

Есть несколько пунктов для проверки. Тот, который рассмотрел мою проблему, был Включить обновление фонового обновления в настройках вашего устройства (см. Снимок экрана ниже). Я отключил эту функцию в качестве меры экономии батареи. Мониторинг не будет работать, если он отключен.

Если это не касается вашей проблемы, есть отличная публикация, которую вы можете прочитать, которая описывает все элементы для устранения неполадок.

iBeacon StartMonitoringForRegion не работает


Background App Refresh

Ответ 2

Это должно сработать. Я хотел бы видеть остальную часть вашего кода, которая настраивает мониторинг, и я бы поставил инструкции NSLog в ваш didEnterRegion didExitRegion и didDetermineState (также зарегистрируйте значение состояния).

Возможно, iOS думает, что никаких региональных переходов не происходит, - что вы всегда "находитесь" в регионе, и поэтому переход не происходит. Переход может занять до 15 минут в фоновом режиме (хотя, если вы находитесь на переднем плане, оно должно быть в пределах 4 секунд для "out" и 1 sec для "in" ). См. http://developer.radiusnetworks.com/2013/11/13/ibeacon-monitoring-in-the-background-and-foreground.html

Вы можете принудительно выполнить обратный вызов области ввода/вывода, установив region.notifyEntryStateOnDisplay=YES; в контролируемый регион, а затем нажмите кнопку плеча. Это должно заставить отслеживать обратный вызов. Если вы сделаете это и не увидите операторов журналов, которые я предложил добавить выше, я был бы очень удивлен.

Ответ 3

Я пробовал почти все, и это не сработало. Затем я просто перезапустил свой iPhone... и он начал работать. Невероятный. У меня была эта проблема с оценочными маяками.