Задать вопрос
@flome1ster

Как отсылать геолокацию на сервер в фоне?

Есть приложение. Суть заключается в том, чтобы работодатель мог видеть своих сотрудников на карте и отправлять на заявку ближайшего. Я создал приложение, которое отсылает геометку, сделал Alamofire запрос на отправку на сервер. Пока приложение запущено, данные отправляются верно, но при свернутом оно уже не отправляет (при этом отслеживает в фоне, но опять же не отправляет)

ContentView.swift:
Код

import SwiftUI
import Combine
import Alamofire
struct ContentView: View {
    @StateObject var deviceLocationService = DeviceLocationService.shared
    @State var tokens: Set<AnyCancellable> = []
    @State var coordinates: (lat: Double, lon: Double) = (1,1)
    
    var body: some View {
        
        VStack{
            Text("Latitude: \(coordinates.lat)")
                .font(.largeTitle)
            Text("Longitude: \(coordinates.lon)")
                .font(.largeTitle)
        }
        
        .onAppear{
            observeCoordinateUpdates()
            observeLocationAccessDenied()
            deviceLocationService.requestLocationUpdates()
            
        }
    }
    func observeCoordinateUpdates(){
        deviceLocationService.coordinatesPublisher
            .receive(on: DispatchQueue.main)
            .sink { completion in
                if case .failure(let error) = completion {
                    print(error)
                }
            } receiveValue: { coordinates in
                self.coordinates = (coordinates.latitude, coordinates.longitude)
                sendGeo()
            }
            .store(in: &tokens)
    }
    func observeLocationAccessDenied(){
        deviceLocationService.deniedLocationAccessPublisher
            .receive(on: DispatchQueue.main)
            .sink{
                print("Show alert")
            }
            .store(in: &tokens)
    }
    
    func sendGeo(){
        let params = ["lat" : coordinates.lat, "lon": coordinates.lon]
        AF.request("https://sup.api.lyncore.net:1494/location",
    method: .post,
    
        parameters: params)

        .responseDecodable(of: baseResponse<String>.self){response in
                if response.response?.statusCode == 200 {
                    print("good")
                }
                else {
                    print("bad")
                }

            }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

  • Вопрос задан
  • 194 просмотра
Подписаться 3 Средний 3 комментария
Пригласить эксперта
Ваш ответ на вопрос

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

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