Получить данные с сервера, пока приложение закрыто - PullRequest
2 голосов
/ 27 января 2020

Недавно я отправился в мир swift и хотел бы знать следующее: Как получить данные из базы данных, когда приложение закрыто? Например, с помощью этого кода и соответствующего синтаксического анализа класса я получаю данные для входа в систему в моем приложении, изменяя некоторый код, если я могу получить что-то еще из своей базы данных, до сих пор это работает идеально. Но сегодня мне нужно иметь возможность запускать код, похожий на тот, который я показываю, но когда приложение закрыто и с полученными данными показывает уведомление. Любая помощь, пожалуйста?

 @IBAction func inicioSeccion(_ sender: Any) {
    username = usernameText.text
    password = passwordText.text

    if(username!.isEmpty || password!.isEmpty){
        showToas(message: "Please check the empty fields")

    }else{
        self.forData { (data) in
            let parser = XMLParser(data: data)
            let parserDelegate = ParserDelegate()
            parser.delegate = parserDelegate
            guard
                parser.parse(),
                let result:[UserXml] = parserDelegate.Users
            else { return }
            if result.count == 1
            {
                self.idUser = result[0].idUser
                self.nombreUser = result[0].nombreUsuario
                self.saveData()
                DispatchQueue.main.async {
                    self.performSegue(withIdentifier: "welcomeConexion", sender: self)
                }
            }
        }
    }

}

func forData(completion:  @escaping (Data) -> ()) {
    let is_SoapMessage1 = String(format: "<soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'><soap:Body><WSLoginUser xmlns='http://tempuri.org/'><username>%@</username><password>%@</password></WSLoginUser></soap:Body></soap:Envelope>",username!,password!)
    //showToas(message: "\(username!)"+" "+"\(password!)")
    let is_URL1: String = "http://10.0.0.160/WebService.asmx"
    let lobj_Request = NSMutableURLRequest(url: NSURL(string: is_URL1)! as URL)
    let session = URLSession.shared

    lobj_Request.httpMethod = "POST"
    lobj_Request.httpBody = is_SoapMessage1.data(using: String.Encoding.utf8)
    lobj_Request.addValue("10.0.0.160", forHTTPHeaderField: "Host")
    lobj_Request.addValue("text/xml; charset=utf-8", forHTTPHeaderField: "Content-Type")
    lobj_Request.addValue(String(is_SoapMessage1.count), forHTTPHeaderField: "Content-Length")
    //lobj_Request.addValue("223", forHTTPHeaderField: "Content-Length")
    lobj_Request.addValue("http://tempuri.org/WSLoginUser", forHTTPHeaderField: "SOAPAction")

    let task = session.dataTask(with: lobj_Request as URLRequest, completionHandler: {data, response, error -> Void in
        //print("Response: \(response!)")
        var strData: String = String(data: data!, encoding: .ascii)!
        strData = strData.replacingOccurrences(of: "\r", with: "\n")
        if let data = data, error == nil {
            completion(data)
        } else {
            print("error=\(error!.localizedDescription)")
        }
    })
    task.resume()
}

1 Ответ

3 голосов
/ 27 января 2020

Вы можете создать это с помощью фоновой выборки :

func application(_ application: UIApplication,
                 didFinishLaunchingWithOptions launchOptions:
                 [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
   // Override point for customization after application launch.

   // Fetch data once an hour.
   UIApplication.shared.setMinimumBackgroundFetchInterval(3600)

   // Other initialization…
   return true
}

func application(_ application: UIApplication, 
                 performFetchWithCompletionHandler completionHandler:
                 @escaping (UIBackgroundFetchResult) -> Void) {
   // Check for new data. 
   if let newData = fetchUpdates() {
      addDataToFeed(newData: newData)
      completionHandler(.newData)
   }
   completionHandler(.noData)
}

Но пользователь может запретить эту функцию для вашего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...