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

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

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

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

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

3 Solutions collect form web for “iBeacons: Если приложение находится в фоновом режиме, locationManager: didEnterRegion: вызывается только при отображении экрана блокировки”

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

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

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

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

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

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

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

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

  • Как создать или создать iBeacons UUID?
  • Предпочтительные варианты использования iBeacon на iOS?
  • Очистка протокола iBeacon
  • Невозможно обнаружить Beacon, когда устройство уже находится в диапазоне Beacon, и затем мы включаем Bluetooth и приложение убито
  • EXC_BAD_ACCESS при установке CLBeacon на ноль
  • Trigger Локальное уведомление об убитом / закрытом приложении для обнаружения iBeacon
  • Разрешение маяков и местоположение пользователя
  • Могу ли я транслировать несколько сигналов ibeacon только из одного bluetooth? и как
  • Как получить текущее местоположение пользователя с использованием маяков для внутренних помещений api?
  • Как декодировать рекламные данные BLE
  • iBeacon: В чем разница между didEnterRegion и didDetermineState (CLRegionStateInside)
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.