2015-09-09 3 views
1

Я вижу огромную разницу в том, как iBeacon работает на iOS 8.X и iOS 9 beta.iBeacon в фоновом режиме

On iOS 8.X Я могу использовать маяки в фоновом режиме (диапазон продолжает работать, когда приложение находится в фоновом режиме, и экран выключен), но на iOS 9 он останавливается, когда приложение переходит на задний план, поворачивая экран включается и выключается, возобновляется диапазон в течение нескольких секунд, а затем он останавливается снова.

Есть ли у кого-нибудь еще это? Если бы вы нашли решение для iOS 9?

+0

Как долго вы видите работу с фоном на iOS 8.x? Фоновая настройка не должна работать более 10 секунд после перехода приложения на задний план, если вы не примете специальные меры для его расширения. http://developer.radiusnetworks.com/2014/11/13/extending-background-ranging-on-ios.html – davidgyoung

+0

Я смог заставить его работать часами –

ответ

1

OK, Установка allowsBackgroundLocationUpdates = YES на CLLocationManager Я использую диапазон для маяков, кажется, решает эту проблему, и я могу продолжать варьироваться для маяков в фоновом режиме, как и раньше.

+0

Будьте осторожны с этой настройкой, если вы хотите отправить свое приложение в AppStore, поскольку он не будет одобрен, если вы не сможете убедить рецензентов в том, что вы создали навигационное приложение. – davidgyoung

+0

Да, его нельзя использовать легко, но в нашем случае его приложение должно функционировать. Надеюсь, что если они одобрят приложение на iOS 8, они сделают то же самое и для iOS 9. –

+0

У меня такая же проблема, и настройка этого свойства не помогла ... что-нибудь еще, что вы настраиваете, чтобы сделать эту работу? – swalkner

-1

Для выполнения фона просто используйте UIBackgroundTaskIdentifier, и ваш код будет работать и в фоновом режиме.

проверить мой ответ iBeacon ranging in the background

+0

Вы решаете только пару секунд в фоновом режиме, что хорошо, но недостаточно для моей цели, с allowBackgroundLocationUpdates установлен на YES, приложение продолжает работать в фоновом режиме навсегда, начиная с маяков –

0

я скопировал ответ Gualtier от here Personnaly я нашел, что это очень полезно с четким объяснением! Надеюсь, что вам помогут

Обновления местоположения начнутся в любом случае. Какие изменения происходят, когда вызов startUpdatingLocation выполняется, когда приложение находится на переднем плане (и задан «UIBackgroundMode»), система содержит утверждение фоновой задачи для вашего приложения; что означает, что ваше приложение не будет приостановлено до тех пор, пока будут выполняться обновления местоположения.

В случае вызова startUpdatingLocation в то время как ваше приложение в фоне, CoreLocation все еще отвечает, начиная с обновлением местоположения для вашего приложения, но система не будет больше держать утверждение для вас, и вашего приложения будет приостановлено, как только разрешено время в фоновом режиме. Документация технически правильная - вы можете запускать обновления местоположения из любого состояния - оставаться активным с приостановкой - это еще одна история.

Этот раз (это) сейчас 10 секунд, поэтому вы считаете, что обновление останавливается через 10 секунд. Но на самом деле ваше приложение теперь приостановлено и больше не может получать обновления. Существует способ, чтобы продлить этот срок до (в настоящее время) до 3-х минут, используя beginBackgroundTaskWithExpirationHandler: (Подробнее об этом здесь:. https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html#//apple_ref/doc/uid/TP40007072-CH4-SW1

ли это длительное время достаточно будет зависеть от вашего приложения

Если ваш цель в попытке подождать до тех пор, пока не начнется обновление местоположения, это энергосбережение, есть и другие способы. - если он подходит для вашего случая использования, услуга значительного изменения местоположения довольно эффективна и лучше подходит для использования в сочетании с стандартная служба определения местоположения - вы можете начать обновление местоположения, когда ваше приложение находится на переднем плане, и отложите обновления местоположения, пока ваше приложение находится в фоновом режиме. Поскольку ваше приложение отслеживает поездки w у которого было бы начало и конец, с обновлением местоположения, выполняемым во время путешествия, в то время как отсрочка обновлений могла бы быть подходящей для вашего случая. Когда обновления отложены, система разбудит ваше приложение, когда оно решит, что это эффективно.Вы можете прочитать больше о том, что здесь: https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html#//apple_ref/doc/uid/TP40009497-CH2-SW14

Кроме того, я предлагаю вам посмотреть на WWDC 2015 презентацию «Что новое в Core Location» , чтобы выяснить, что приходит в прошивке 9. Там есть новый способ, чтобы получить текущее местоположение, которое может вас заинтересовать, и есть дополнительный шаг для получения обновлений фонового местоположения. Видео здесь: https://developer.apple.com/videos/wwdc/2015/?id=714

+0

Это интересно, но doesn «очень сильно помогает iBeacon, так как это зависит от API мониторинга региона, а не от обновлений местоположения. – bompf

1

, если вы используете ИОС 9 или более поздней версии, вы должны добавить все заявления запрос о местоположении Доступ к месту еще разрешается всякий раз, когда приложение работает (т.е. не приостановлено), и имеет достаточное разрешение (т.е. имеет авторизацию InInUse и используется в , или у нее есть всегда авторизация).

[self.locationManager requestAlwaysAuthorization]; 
[self.locationManager requestWhenInUseAuthorization]; 

Теперь, чтобы фоновый режим вам нужно добавить эту ссылку self.locationManager.allowsBackgroundLocationUpdates = YES;

Обсуждение: По умолчанию это NO для приложений, связанных с прошивкой 9.0 или более поздней версии, независимо от минимальной цели развертывания.

С UIBackgroundModes set to include "location" in Info.plist, вы должны установить это значение ДА, когда UIBackgroundModes не включает в себя «местоположение», является фатальной ошибкой.

Сбросить эту недвижимость до NO эквивалентно опусканию "местоположения" от к значению UIBackgroundModes.