Завершенное приложение не просыпается с пакетом iBeacon

Может ли iOS получить iBeacon пакет в спящем режиме и разбудить приложение?

Я закрыл приложение и перезапустил его, а затем оставил телефон в спящем режиме. Устройство находилось в зоне маяка при перезагрузке устройства, и после перезагрузки я отключил экран устройства. Мое приложение iOS не просыпается, поэтому я подозреваю, что оно не получает пакет iBeacon.

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

Работает ли пробуждение приложения в случае принудительного завершения работы приложения и получает ли iOS пакет iBeacon при перезагрузке и немедленном спящем режиме?

Если я включу экран, он сразу же начнет работать, но если экран выключен после перезагрузки, он не получает пакет iBeacon.


person HKP    schedule 12.08.2018    source источник
comment
Привет, вам нужно предоставить немного больше информации, если люди могут вам помочь. Пожалуйста, опубликуйте свой текущий соответствующий код. Спасибо.   -  person MandyShaw    schedule 12.08.2018


Ответы (1)


Да, iOS CoreLocation запустит ваше приложение при входе или выходе из региона и работает даже после принудительного завершения после iOS 7.1.1. Вы получите соответствующий обратный вызов, только если настроите свой CLLocationManagerDelegate в методе didFinishLaunchingWithOptions AppDelegate. Если вы не настроите это в этом методе, CoreLocation не будет знать, что нужно сделать обратный вызов после запуска приложения.

Тестирование событий входа при перезапуске приложения может быть немного сложным, поэтому вот несколько советов, как избежать ловушек:

  1. Если очень важно, чтобы ваше приложение думало, что оно находится «вне» региона, когда оно было запущено в последний раз. Если он был «внутри» региона, когда он последний раз работал, он не обязательно получит еще один обратный вызов входа, потому что он будет думать, что никогда не покидал. При тестировании убедитесь, что вы получаете обратный вызов didExit или обратный вызов didDetermineState, говорящий о том, что он находится вне региона, до закрытия приложения или перезагрузки. Проверьте это с помощью оператора NSLog, локального уведомления или какого-либо пользовательского индикатора пользовательского интерфейса, добавленного на экран вашего приложения.

  2. Если вы перезагрузите устройство iOS, CoreLocation не будет полностью инициализирован сразу — я видел, что требуется 5 минут после появления экрана, прежде чем я получу какие-либо обратные вызовы. Убедитесь, что вы ждете достаточно долго.

  3. После полной инициализации CoreLocation события входа в регион обычно происходят в течение одной секунды после того, как маяк входит в зону действия. Однако, если ограниченные слоты шаблона аппаратной помощи Bluetooth заполнены на устройстве (обычно это происходит, если у вас есть несколько других приложений-маяков, которые использовали их все), то события входа возвращаются к сканированию программного обеспечения, которое происходит только каждые 10 минут или более. Входное событие может занять столько времени в такой ситуации. Убедитесь, что вы ждете достаточно долго, прежде чем предположить, что это не работает.

person davidgyoung    schedule 12.08.2018
comment
Спасибо за ответ, я проверил больше, и он отлично работает почти во всех сценариях. только в одном конкретном случае я не могу использовать маяк, который называется Force kill -> перезагрузить устройство -> немедленно перевести устройство в спящий режим. в журналах ОС ios вообще не запускает мое приложение. также, если я просто нажму кнопку питания и разбужу iphone, тогда приложение запустится ios, и после этого все будет работать нормально. Так что только в этом конкретном случае он не работает, есть ли какое-либо условие, при котором ios не запускает службу определения местоположения и приложение в фоновом режиме, если устройство переходит в спящий режим сразу после перезапуска. - person HKP; 14.08.2018