IBeacons: Если приложение находится в фоновом режиме, locationManager: didEnterRegion: вызывается только при отображении экрана блокировки

Я работаю над iOS-приложением, которое контролирует области iBeacon. Когда приложение работает в фоновом режиме, я хочу, чтобы он отправлял локальное уведомление всякий раз, когда он сталкивается с определенной областью iBeacon. Все работает отлично, за исключением одного: locationManager: didEnterRegion, по-видимому, не вызывается, пока пользователь не отобразит экран блокировки. Таким образом, даже если устройство прошло через область iBeacon, когда приложение было в фоновом режиме, они не получают уведомление, пока не отобразятся экран блокировки.

Я также пробовал использовать startMonitoringForRegion, и такие работы - если приложение работает в фоновом режиме, locationManager: didDetermineState: срабатывает, когда устройство входит в область iBeacon. Тем не менее, он делает это только один раз - если пользователь впоследствии выйдет из системы iBeacon и возвратится в нее, диспетчер locationManager: didDetermineState не запускается снова.

Я запускаю iPhone 5 и использую iPhone 4 как iBeacon, если это имеет значение.

Исправление: Это явление, очевидно, происходит только тогда, когда я использую iPhone 4 как клиент. Если я использую 5 секунд, уведомление доставляется немедленно.

Ответ 1

Просто пытаюсь получить больше информации. Вы установили notifyEntryStateOnDisplay в YES на CLBeaconRegion? Это звучит так.

Из документации:

Когда установлено значение "ДА", диспетчер местоположений отправляет уведомления маяка, когда пользователь включает дисплей, а устройство уже находится внутри региона. Эти уведомления отправляются, даже если ваше приложение не запущено. В этой ситуации система запускает ваше приложение в фоновом режиме, чтобы оно могло обрабатывать уведомления. В обеих ситуациях диспетчер местоположений вызывает метод locationManager: didDetermineState: forRegion: его объекта-делегата.

Значение по умолчанию для этого свойства: NO.

Ответ 2

У меня была аналогичная проблема, и я попробовал различные изменения уровня кода, подробно описанные выше (и другие сообщения). Ранжирование работало, но обнаружение зоны входа и выхода не выполнялось.

Оказалось, что у меня появилось Refresh Ref. После того, как я включил фоновое приложение, обновив "Ввод и Выход" зон, работал правильно.

Ответ 3

У меня была такая же проблема. Я был уверен, что все настроено нормально.

Решение было очень просто: просто удалите приложение из устройства и запустите его снова в Xcode , Это работало для меня как шарм.