вызов приложения, когда оно не запущено и iBeacon находится в диапазоне

Я работаю над приложением для iPhone, которое уведомляет пользователя, когда он входит в область iBeacon.

У меня есть несколько вопросов относительно того же:

Из документов:

Мониторинг запускает приложение при входе в контролируемую область iBeacon.

Но поведение такое:

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

Можно ли запускать приложение, когда пользователи входят/выходят из региона, даже если дисплей выключен или включен, а не только при пробуждении телефона?

Я проверил эту ссылку iBeacon Notification когда приложение не запущено , что показывает, что это возможно. Я отслеживаю iBeacon, но не могу добиться ожидаемого поведения. Я что-то упускаю??

Любая помощь приветствуется.


person vipul mittal    schedule 04.02.2014    source источник


Ответы (2)


Да, вы можете получать уведомления при входе в регион в фоновом режиме. Это будет происходить до тех пор, пока:

  • Приложение было открыто хотя бы один раз
  • Пользователь не убил приложение напрямую (выходя из процесса, а не просто закрывая его)

Теперь понимание того, как он ведет себя, немного больше нюансов.

В моей компании мы провели довольно много исследований по этому вопросу. На самом деле мой коллега написал отличный пост в блоге о поведении: Мониторинг iBeacon в фоновом и активном режиме.

Что было неожиданным, так это то, сколько времени может потребоваться, чтобы получить didEnterRegion в фоновом режиме:

Condition                                      Max time to detect a region change
--------------------------------------------   ----------------------------------
Phone awakened,notifyEntryStateOnDisplay=YES   1 second
Phone awakened, notifyEntryStateOnDisplay=NO   NEVER
UIBackgroundModes=location ON                  up to 15 minutes
UIBackgroundModes=location OFF                 up to 15 minutes
person csexton    schedule 04.02.2014

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

  • notifyOnEntry - вы будете уведомлены через locationManager:didEnterRegion:, когда пользователь войдет в регион
  • notifyOnExit - вы будете уведомлены через locationManager:didExitRegion:, когда пользователь покинет регион
  • notifyEntryStateOnDisplay — вы будете уведомлены через locationManager:didDetermineState:forRegion:, когда пользователь активирует экран своего устройства и находится внутри региона.

Обратите внимание, что вы должны полностью выйти из региона, прежде чем didEnterRegion: будет вызвана снова, и иногда устройству может потребоваться минута или больше, чтобы правильно зарегистрировать, что вы покинули регион. Поскольку маяк может вещать на расстоянии до 30 или 50 метров (или даже больше), вам нужно либо отойти на большое расстояние от маяка, чтобы покинуть регион, либо иным образом выключить маяки, подождать минуту или около того, а затем вернуться. чтобы вызвать изменение.

person James Frost    schedule 04.02.2014
comment
Я знаю, что это работает, когда пользователь пробуждает устройство, но мой вопрос: что происходит, когда телефон все время выключен или телефон все время включен? - person vipul mittal; 04.02.2014
comment
Пока телефон включен (но экран может быть выключен) и пользователь не закрыл приложение принудительно, вы получите обратный вызов одним из перечисленных выше методов. - person James Frost; 04.02.2014