Получать сигнал от маяка, пока приложение находится в фоновом режиме
У меня есть приложение для iOS, которое взаимодействует с маяком. Также есть функция для обнаружения сигнала от маяка, и если сигнал выходит за пределы диапазона, я хочу сохранить что-то в базе данных (в данном случае данные ядра)
func updateDistance(distance: CLProximity) {
UIView.animateWithDuration(1.0) { [unowned self] in
switch distance {
case .Unknown:
self.view.backgroundColor = UIColor.grayColor()
self.distanceReading.text = "No Beacon Signal Detected"
updateDatabaseWithLocation()
}
}
}
Таким образом, приложение работает нормально, пока приложение работает на переднем плане. Насколько я понимаю, приложение также может работать в фоновом режиме, когда пользователь не использует приложение и все еще получает сигнал от маяка. Если так, как я могу выполнить эту задачу?
Я добавил следующее в info.plist и все еще не работал.
Также возможно ли обновить базу данных?
1 ответ
Вы можете выбирать только маяки (что дает вам доступ к приблизительным расстояниям), когда приложение работает. Как только вы покинете приложение (нажмите кнопку "Домой", перейдите к другому приложению и т. Д.), IOS приостановит приложение, и ранжирование перестанет работать. Непрерывное использование Bluetooth-радио в фоновом режиме быстро разряжает аккумулятор смартфона.
Тем не менее, вы можете сделать так, чтобы ваше приложение подписывалось на фоновый режим, когда смартфон входит и выходит из диапазона маяка (или группы маяков). Это называется мониторингом региона, и это тот же механизм, который использует геозона.
Теперь события "вход" и "выход" сами по себе не дают вам доступа к приблизительным расстояниям. Однако, поскольку iOS на несколько секунд выведет ваше приложение в фоновый режим для обработки этих событий, ранжирование фактически возобновится на время (при условии, что вы не остановили его, пока приложение не было приостановлено), прежде чем iOS вернет приложение в спящий режим. снова.
Вы даже можете продлить "несколько секунд" до нескольких минут с помощью фонового выполнения задачи.
Все вышеперечисленное не требует использования фоновых режимов - только "всегда" авторизация для использования Location Services.
Обычно вы не можете держать приложение в фоновом режиме неопределенно долго с маяками. Фоновая поддержка строго регламентируется Apple и разрешена только, например, для приложений навигации или музыкальных приложений. Иногда люди пытаются использовать фоновый режим "местоположение", чтобы приложение работало в фоновом режиме (и, таким образом, может различать маяки), и некоторые даже сообщают, что смогли пройти его через процесс проверки, но, похоже, это больше исключение, чем правило.
Если вы все-таки решите попробовать, вам необходимо:
- включить фоновый режим "местоположение",
- set позволяет BackgroundLocationUpdates to
true
на вашеCLLocationManager
пример, - начать регулярные обновления местоположения: startUpdatingLocation.
Это должно поддерживать приложение в фоновом режиме, даже если вы покинете его.