iBeacon в фоновом режиме — варианты использования

Количество вопросов по SO, связанных с iBeacon и его фоновыми возможностями, увеличивается, и по этому поводу возникает некоторая путаница. Я тестировал проект AirLocate.

iBeacon имеет 2 «возможности»: мониторинг региона и ранжирование.

Мониторинг региона ограничен 20 регионами и может работать в фоновом режиме (подслушивающего устройства) и имеет разных делегатов для уведомления прослушивающего приложения (и пользователя) о входе / выходе в регионе - даже если приложение находится в фоновом режиме или телефон заблокирован. .

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

Кроме того, мониторинг 20 регионов является пределом устройства. Если пользователь использует напоминания о геозонах, другие приложения, использующие мониторинг региона; это снизит это число.

  1. Значит, мы говорим, что я не могу развернуть приложение для всего торгового центра (более 100 магазинов), которое использует iBeacons магазина для отправки пользователю «конкретного» уведомления, когда приложение находится в фоновом режиме или телефон заблокирован?

  2. Я понимаю, что рекламное устройство (маяк) также должно быть на переднем плане, чтобы рекламировать область, в которую может «войти» подслушивающее устройство. Итак, мы говорим, что если у владельца магазина было устройство iOS; Я не мог, например, сэкономить ему деньги, попросив его использовать свой iPhone (по крайней мере, на раннем этапе) в качестве рекламного устройства (маяка) — поскольку приложение, вероятно, не всегда будет на переднем плане?

  3. Таким образом, в случае iBeacon + MLB один UUID (или ‹20 UUID) используется/используется для приложения, чтобы, возможно, определить входную дверь, и тогда пользователю потребуется разблокировать телефон/перенести приложение на передний план, чтобы использовать его (найти место и т. д.)?

Могу ли я тогда назвать iBeacon: функция одного места/события (магазин, парк и т. д.), которая требует самого «переднего плана» внимания пользователя, чтобы иметь «полный» практический вариант использования?

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


person Khaled Barazi    schedule 20.10.2013    source источник
comment
Уверены ли мы, что Кроме того, мониторинг 20 регионов является пределом устройства. это предел устройства ?? Я думаю, что это для каждого приложения.   -  person rustylepord    schedule 15.08.2014
comment
Это ограничение устройства или ограничение для каждого приложения?   -  person Oren    schedule 06.11.2014


Ответы (1)


Похоже, вы на правильном пути. В целом вы правы в том, что приложение должно быть на переднем плане, чтобы в полной мере использовать возможности iBeacon. Несколько уточнений по вашим трем основным вопросам:

  1. Ваш вариант использования торгового центра может работать с несколькими ограничениями. (a) вы должны сохранить свои CLBeaconRegions, заставив многие или все 100 магазинов использовать один и тот же UUID и/или основной номер, отличаясь только второстепенным номером. Это позволяет настроить один CLBeaconRegion для мониторинга многих. (б) Если приложение переходит в фоновый режим после просмотра iBeacon 1, оно не сможет проснуться во второй раз, увидев iBeacon 2 в том же CLBeaconRegion, если только сначала оно не перестанет видеть другие маяк в этом CLBeaconRegion. (Вы можете немного поиграть с этим, настроив несколько CLBeaconRegions и попробовав групповые хранилища, чтобы соседние в перекрывающемся 50-метровом диапазоне Bluetooth-радио были в разных CLBeaconRegions.)

  2. Нет, владелец магазина не может использовать свой iPad в качестве iBeacon в фоновом режиме — для работы он должен быть на переднем плане. Но они могут сделать это на своем компьютере с Windows или Mac, используя виртуальную программу iBeacon. Моя компания предлагает один из них для бесплатной загрузки: http://developer.radiusnetworks.com/ibeacon/

  3. В случае использования входа в дверь, да, пользователь должен будет подтвердить уведомление на экране блокировки, чтобы вывести приложение на передний план. Типичная реализация будет использовать один CLBeaconRegion (вероятно, со всеми iBeacons, имеющими общий ProximityUUID и, возможно, даже основной) для оповещения пользователя.

Редактировать 11 апреля 2020 г. Apple объявила о планах по новой рекламе-маяку, которая будет работать в фоновом режиме. См. здесь для получения дополнительной информации.

person davidgyoung    schedule 21.10.2013
comment
Tx для подробного обходного пути A.On #1: настроить кластеры из 10 хранилищ с каждым хранилищем в этом кластере, использующим уникальный UUID+Major кластера, но с каждым хранилищем в этом кластере, имеющим разные второстепенные. Затем, когда приложение входит в один из CLBeaconRegion, оно распознает кластер, в который оно вошло (используя идентификатор CLRegion), и затем приложение может выполнить ранжирование, чтобы определить младшие компоненты, доступные в этом кластере. Однако ранжирование по-прежнему не может происходить в фоновом режиме, и приложение не знает, через какое хранилище в этом кластере проходит пользователь (самый сильный сигнал и т. д.), пока приложение не будет переведено на передний план. Правильно? - person Khaled Barazi; 21.10.2013
comment
На самом деле вы можете переключаться в фоновом режиме, но только на очень короткое время. Когда iOS переводит ваше приложение в фоновый режим при входе/выходе из CLBeaconRegion, оно будет работать около 5 секунд, прежде чем будет приостановлено. В это время вы можете произвести ранжирование, а затем использовать результаты для уточнения уведомления, отправляемого пользователю. - person davidgyoung; 21.10.2013
comment
@davidgyoung только что наткнулся на ваш полезный пост в блоге, спасибо за него! Было интересно, смогли ли вы войти/выйти, когда приложение вообще не работает (т.е. убито) - person Ege Akpinar; 05.02.2014
comment
Нет, ты не можешь этого сделать. См. мой ответ здесь: stackoverflow.com/questions/21124528/ - person davidgyoung; 05.02.2014
comment
Проверьте обновление этого ответа от @davidgyoung Теперь это возможно на iOS7.1. Рекомендуем прочитать: beekn.net/2014/03/ - person atxe; 12.03.2014
comment
К вашему сведению, поведение фонового режима изменилось в iOS7.1. - person bluefloyd8; 31.03.2014
comment
@Ege Akpinar Да, вы можете, я сделал аналогичный проект и запускал службы определения местоположения в фоновом режиме, даже если приложение было закрыто, потому что это вещь iOS, а не само приложение. И даже когда приложение закрывалось, оно вызывало методы didEnterRegion и didExitRegion. Раньше я отправлял уведомления, когда приложение входит в регион и выходит из региона, и оно отлично работало, даже когда приложение было закрыто. Но метод didRangeForBeacons работает только тогда, когда приложение находится на переднем плане или в течение нескольких секунд после того, как оно уходит в фоновый режим, а затем останавливается. - person Kegham K.; 09.11.2016
comment
@КегамК. спасибо, в iOS 7 в 2014 году это было невозможно. - person Ege Akpinar; 09.11.2016