Necesito ejecutar una búsqueda en segundo plano todos los días una vez a las 2 p.m.

He probado esto :

Este es mi código funcionando bien, pero funciona cuando ios tiene la oportunidad de ejecutar la búsqueda en segundo plano

He seleccionado setMinimumBackgroundFetchInterval en todos los días una vez, pero necesito determinar en el reloj a las 2 pm

¿Cómo usar la programación con la recuperación de antecedentes o determinar el tiempo de ejecución?

application.setMinimumBackgroundFetchInterval(86400) // set in func **didFinshLaunshingWithOption**
 func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
       uploadJSON() { (newData,error) in
            if error != nil {
                NSLog("Failed")
                completionHandler(.failed)
            } else {
                NSLog("success")
                completionHandler(.newData)
            }
        }
    }
func uploadJSON(completion: ((Bool,Error?) -> Void )? = nil) {
        let data:String = "test sync"
        let session = URLSession.shared
        let request = NSURLRequest(url: NSURL(string: "url")! asURL)
        let dataToUpload = data.data(using: String.Encoding.utf8)
        let uploadTask = session.uploadTask(with: request as URLRequest, from: dataToUpload,completionHandler: { (responseData, response, error) in
            // Check on some response headers (if it's HTTP)
            if let httpResponse = response as? HTTPURLResponse {
                switch httpResponse.statusCode {
                case 200..<300:
                    print("Success")
                case 400..<500:
                    print("Request error")
                case 500..<600:
                    print("Server error")
                case let otherCode:
                    print("Other code: \(otherCode)")
                }
            }
            // Do something with the response data
            if let
                responseData = responseData,
                let responseString = String(data: responseData, encoding: String.Encoding.utf8) {
                print("Server Response:")
                print(responseString)
            }
            // Do something with the error
            if let error = error {
                print("Serverwwww Response:")
                print(error.localizedDescription)
                // completion?(false, error)
            }
        })
        uploadTask.resume()
    }
0
pro-student 27 oct. 2019 a las 12:41

1 respuesta

La mejor respuesta

Con setMinimumBackgroundFetchInterval puede definir solo con qué frecuencia necesita que se actualice su aplicación, pero debe recordar que no proporciona un comportamiento determinista. Como se describe here:

El sistema espera hasta que las condiciones de la red y la alimentación sean buenas , por lo que debería poder recuperar cantidades adecuadas de datos rápidamente

Entonces, con esta API, le hace saber al sistema operativo que le gustaría actualizar su aplicación, p. cada hora llamando a UIApplication.shared.setMinimumBackgroundFetchInterval(3600).

Con lo anterior en mente, puede configurar que necesita realizar una acción cada p. Ej. 10 minutos. Luego, cada vez que se ejecuta su código, solo necesita verificar qué hora es y realizar su búsqueda de fondo lo antes posible después de las 2 pm.

0
Krzysztof Skrzynecki 24 mar. 2020 a las 20:42