#ios7 #core-bluetooth #ibeacon
#ios7 #ядро-bluetooth #ibeacon
Вопрос:
после некоторого изучения iBeacon у меня возникли следующие вопросы, по которым я не смог найти расширенную справку:
-
Как iBeacon запускает наше приложение? Запускает ли оно наше приложение, переводя его в фоновый режим, если приложение было приостановлено?
-
В какой фоновый режим iBeacon перевел наше приложение? Что мы можем сделать в этом фоновом режиме?
-
Как долго может длиться этот фоновый режим, прежде чем он снова будет приостановлен? Какая функция была вызвана, когда оно должно было быть приостановлено?
-
Как мы можем продлить это фоновое время, если нам нужно?
-
Как мы все знаем, iBeacon запускает наше приложение только при смене региона (вход / выход), но как нам перезапустить приложение пользователя, если пользователь все еще находится в том же регионе?
Заранее благодарю вас.
Ответ №1:
Некоторые ответы:
-
iBeacon может перевести ваше приложение в фоновый режим с помощью API мониторинга. Это может сделать, даже если ваше приложение не запускалось с момента перезагрузки устройства или даже если приложение было отключено из переключателя задач (хотя для последнего требуется iOS 7.1 ). Это работает, когда ваше приложение вызывает
startRangingBeaconsInRegion:
метод наCLLocationManager
, а также реализуетCLLocationManagerDelegate
протоколlocationManager:didDetermineState:forRegion:
,locationManager:didEnterRegion:
и / илиlocationManager:didExitRegion:
методы. -
Даже если ваше приложение не запущено, оно будет запущено в фоновом режиме и при обнаружении маяка, соответствующего определению переданного региона, будут вызываться вышеуказанные методы. За это время вы можете выполнить любой код, который хотите, для которого не требуется пользовательский интерфейс. Обычно это включает в себя обновление состояния приложения, вызов веб-службы или отправку локального уведомления, чтобы побудить пользователя вывести приложение на передний план. (И нет, вы не можете программно вывести свое приложение на передний план.)
-
Приложение работает в фоновом режиме всего около пяти-десяти секунд, а затем снова приостанавливается. (Если бы ваше приложение уже было на переднем плане, оно могло бы продолжать работать бесконечно.) Если оно приостанавливается по истечении этого короткого времени, вызывается ваш класс, реализующий метод
UIApplicationDelegate
протоколаapplicationWillResignActive:
. -
Вы можете запросить дополнительное фоновое время, вызвав
beginBackgroundTaskWithExpirationHandler:
методUIApplication
класса. Но получение этого дополнительного времени не гарантировано, и вы не можете продолжать делать это бесконечно. -
Как только ваше приложение попадает в регион и вы получаете фоновое уведомление, вы не сможете получить второе уведомление для запуска вашего приложения в том же регионе, пока не выйдете из него. Вы можете немного поиграть с этим, определив несколько регионов и установив несколько маяков, которые могут вызывать больше входов и выходов. Но все это обходные пути. В общем случае вы не можете перезапустить приложение с помощью этого метода, если нет дополнительного события входа / выхода.
Комментарии:
1. Спасибо, Дэвид, я видел твой пост в блоге, и он очень информативный! Я пытаюсь запустить multipeer connectivity, когда ibeacon запускает мое приложение, но из других сообщений stackoverflow люди сказали, что multipeer connectivity не может работать в фоновом режиме. У вас есть какие-либо идеи по этому поводу?
2. Я понимаю, что это ограничено приложениями на переднем плане, да. Вы можете сделать гораздо больше с подключением Bluetooth в фоновом режиме на устройствах Android. Apple устанавливает строгие ограничения на фоновые действия v, чтобы сэкономить время автономной работы. Это полезно для поддержания заряда вашего телефона, но имеет печальные последствия для функциональности приложения.
3. Здравствуйте, @davidgyoung, внимательно прочитав ваш блог о времени реакции ibeacon в фоновом режиме, я понял, что вы использовали iPhone 4s в качестве платформы для тестирования. Я хотел бы подтвердить, что я наблюдал такое же поведение и на своем iPhone 4s, время фоновой реакции — это просто ерунда. Однако на iPhone 5s фоновое время реакции практически мгновенное. Я не уверен, что у вас случайно есть iphone 5s, с которым вы можете протестировать. Я использую один и тот же код как на 4s, так и на 5s.
4. Для этих методов делегирования вы должны вызвать startMonitoringBeaconsInRegion: не starttrangingbeaconsinregion: