Выполнение задачи (выполнение кода / сетевой вызов) в фоновом режиме, когда пользователь входит / выходит из области расположения в iOS - PullRequest
0 голосов
/ 31 декабря 2018

Система: В моем приложении я использую геозону (мониторинг региона).Всякий раз, когда пользователь входит или выходит из контролируемой области или региона, приложение отображает локальное уведомление, если приложение находится в фоновом режиме или даже закрыто.Это работает отлично.Приложение может отображать локальные уведомления.

Теперь мне также нужно отправить эту информацию (если пользователь находится внутри или за пределами контролируемой области) через HTTP POST-вызов на внутренний сервер приложения.

Проблема: Приложение выполняет вызов API в методах делегатов LocationManager, но иногда это работает, а иногда нет.Кажется, что выполнение кода останавливается случайным образом, если приложение не находится на переднем плане.

Пример кода

// MARK: - Location Manager Delegate
func locationManager(_ manager: CLLocationManager, didEnterRegion region: CLRegion) {
    if region is CLCircularRegion {
        showLocalNotification(forRegion: region)// Works
        updateUserEntryAPICall(region: region) // Sometimes works
    }
}

func locationManager(_ manager: CLLocationManager, didExitRegion region: CLRegion) {
    if region is CLCircularRegion {
        showLocalNotification(forRegion: region) // Works
        updateUserExitAPICall(region: region) // sometime works
    }
}

Я не включил возможность фонового режима в iOS.Тем не менее, приложение может показывать локальные уведомления.Нужно ли включать его, чтобы заставить работать сетевой вызов?

enter image description here

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 31 декабря 2018

Похоже, вы используете обычный URLSession для выполнения запроса API.Вы должны убедиться, что вы делаете это в сеансе, который обрабатывает работу в фоновом режиме, например, инициализируя его следующим образом:

let session = URLSession(configuration: .background(withIdentifier: "foo"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...