Непрерывное отслеживание местоположения iOS через N минутIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Непрерывное отслеживание местоположения iOS через N минут

Сообщение Anonymous »


Кто-нибудь реализовал фоновые обновления местоположения в iOS, любая помощь была бы полезна, ниже мой сценарий

Постановка задачи
[*]Я хочу отслеживать местоположение пользователя каждые N минут и отправлять его на сервер (как фоновые случаи, так и состояние уничтожения)
До сих пор я пробовал
[*]
Включены фоновые режимы, обновление местоположения, фоновая выборка и фоновая обработка
[*]
Создан синглтон для отслеживания местоположения, проверьте приведенный ниже код и вызов этого класса

didFinishLaunchingWithOptions – AppDelegate

Теперь я также изучил BakcgroundTasks, но фоновая задача зарегистрирована, но она не выполняется по истечении заданного интервала, пожалуйста, проверьте код для этого также ниже
р>
классСотрудникAttendanceTracker: NSObject,CLLocationManagerDelegate { статический let общий =СотрудникAttendanceTracker() частный пусть locationManager = CLLocationManager() частный вар LastLocationDate = Дата() статический пусть LOCATION_INTERVAL = 1 var locationUpdate: (() -> Пустота)? частное переопределение init() { супер.инит() НастройкаМенеджерлокации() } частная функция setupLocationManager() { locationManager.delegate = сам locationManager.desiredAccuracy = kCLLocationAccuracyBest locationManager.activityType = .other locationManager.distanceFilter = kCLDistanceFilterNone locationManager.allowsBackgroundLocationUpdates = true locationManager.pausesLocationUpdatesAutomatically = false locationManager.showsBackgroundLocationIndicator = true если #available(iOS 9.0, *) { locationManager.requestAlwaysAuthorization() } еще { locationManager.requestWhenInUseAuthorization() } } // // // // ОТМЕТКА: - CLLocationManagerDelegate // func locationManager (_ менеджер: CLLocationManager, статус DidChangeAuthorization: CLAuthorizationStatus) { статус переключения { случай .ограничено: //показатьLocationPermissionAlert() Logger.s("Доступ к местоположению ограничен.") случай .отказано: //показатьLocationPermissionAlert() Logger.s("Пользователю запрещен доступ к местоположению.") случай .notDetermined: // showLocationPermissionAlert() Logger.s("Доступ к местоположению не определен.") случай .authorizedAlways: если #available(iOS 9, *) { locationManager.requestLocation() } еще { locationManager.startUpdatingLocation() locationManager.startMonitoringSignificantLocationChanges() } по умолчанию: // showLocationPermissionAlert() перерыв } } func locationManager (_ менеджер: CLLocationManager, DidUpdateLocations Locations: [CLLocation]) { охранник let location = location.last else { return } Logger.s("Широта пользователя: \(location.coordinate.latitude), долгота: \(location.coordinate.longitude)") locationManager.stopUpdatingLocation() пусть сейчас = Дата() if isItTime(сейчас: теперь как NSDate) { если должноSendLocationToServer() { self.sendLocationToServer(location: location,completion: { self.locationUpdate?() }) }еще{ self.locationUpdate?() } Logger.s(сейчас) Logger.s(местоположение) }еще{ self.locationUpdate?() } } AppDelegate.swift
func ScheduleAppRefresh() { let request = BGAppRefreshTaskRequest (идентификатор: «com.nexxio.ec.location_update») request.earliestBeginDate = Date(timeIntervalSinceNow: 15 * 60) // через 15 минут делать { попробуйте BGTaskScheduler.shared.submit (запрос) Logger.s("ЗАПРОС ЗАДАЧИ BG ОТПРАВЛЕН") } ловить { print("Невозможно отправить запрос задачи: \(ошибка)") } } func handleAppRefresh (задача: BGAppRefreshTask) { Task.expirationHandler = { // Обработка срока действия, если необходимо Logger.s("ЗАДАЧА БГ ИСТЕКЛА") Task.setTaskCompleted(успех: ложь) } Logger.s("ОБРАБОТКА ЗАПРОСА ЗАДАЧИ BG") СотрудникAttendanceTracker.shared.locationUpdate = { Task.setTaskCompleted(успех: правда) } } функция RegisterBackGroundTasks() { // Регистрация для фоновых задач BGTaskScheduler.shared.register( forTaskWithIdentifier: "com.nexxio.ec.location_update", использование: DispatchQueue.global() ) { задача в // Логика вашего обработчика задач //task.setTaskCompleted(успех: правда) self.handleAppRefresh(задача: задача как! BGAppRefreshTask) } }
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»