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
, Это работало для меня как шарм.