Какова суть Background Modes в IOS?

Имеется приложение, проверяющее местоположения пользователя в реальном времени. В xCode на вкладке Capabillities включен Background Modes как locations update. Отправил сие чудо в app store. Там его успешно отклонили, указав, что включена возможность получения местоположения в фоновом режиме, но функции данной не нашли в приложении. Я в панике - думаю, как так, ведь без этой настройки, при сворачивании приложения в фон, приложение не будет получать координаты. Решил проверить - выключил настройку, запустил (эмулятор) - все работает, все обрабатывается в фоне и при заблокированном устройстве. Так какова суть настройки Background Modes? Можно ли обойтись без нее (приложение должно получать координаты в течении часа - трех после включения через само приложение, при этом оно будет скорее всего свернуто)?
  • Вопрос задан
  • 3450 просмотров
Решения вопроса 1
@badger-tall
А вы в долго в фоновом режиме проверяли получение обновлений location ?
Любое активное приложение при переходе в фоновый режим сперва переходит в
background mode, в котором оно продолжает получать системные вызовы и работать, приложению даётся операционкой какое-то время закончить свои дела и лишь затем оно двигается в suspended mode, в котором оно уже не работает и ничего не получает.

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

Если почитать некоторые guide'ы:

www.raywenderlich.com/29948/backgrounding-for-ios

То можно отметить, что они оценивают время, которое обычное, не имеющее background-разрешений приложение может получить в фоновом режиме в 10 минут:

"If your app does not need to do any of these things, then you’re out of luck… with one exception: all apps get up to 10 minutes to finish whatever they were doing before the app is truly suspended."

прежде чем уйдет в suspended mode.

При этом, что касается конкретно обновлений location:

"Once again, for the sneaks: you can only use this background mode if your app truly needs this information to provide value for the user. If you use this mode and Apple sees nothing the user will gain from it, your app will be rejected. Sometimes Apple will also require you to add a warning to your app’s description stating that your app will result in increased battery usage."

То Apple требует для получающих background-разрешение приложений, что бы их "висение" выражалось в какой-то очевидной и полезной для пользователя деятельности, а не просто "про себя" собирало какую-то статистику. То есть ваше приложение должно выводить пользователю какую-то полезную информацию, выработанную за счёт получения обновлений location, просто так висеть и "есть" батарею не дадут.

P.S. Если вас устроит Wi-Fi точность - то есть вариант использовать significant-change location service, он умеет сам будить приложение каждые 15 минут:

https://developer.apple.com/library/ios/documentat...

"If GPS-level accuracy isn’t critical for your app and you don’t need continuous tracking, you can use the significant-change location service. It’s crucial that you use the significant-change location service correctly, because it wakes the system and your app at least every 15 minutes, even if no location changes have occurred, and it runs continuously until you stop it.

...

If you leave the significant-change location service running and your iOS app is subsequently suspended or terminated, the service automatically wakes up your app when new location data arrives. At wake-up time, the app is put into the background and you are given a small amount of time (around 10 seconds) to manually restart location services and process the location data. (You must manually restart location services in the background before any pending location updates can be delivered, as described in Knowing When to Start Location Services.) Because your app is in the background, it must do minimal work and avoid any tasks (such as querying the network) that might prevent it from returning before the allocated time expires. If it does not, your app will be terminated. If an iOS app needs more time to process the location data, it can request more background execution time using the beginBackgroundTaskWithName:expirationHandler: method of the UIApplication class.
"
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы