我想继续使用Alamofire上传图片,即使应用进入背景状态

问题描述

    var backgroundTask: uibackgroundtaskIdentifier = .invalid
        func registerBackgroundeTask(){
        backgroundTask = UIApplication.shared.beginBackgroundTask{
         endBackgroundTask()
        }
        assert(backgroundTask != .invalid)
        }
        func endBackgroundTask() {
           print("Background task ended.")
           UIApplication.shared.endBackgroundTask(backgroundTask)
           backgroundTask = .invalid
       }


        let alamofireManager = Alamofire.SessionManager(configuration: URLSessionConfiguration.background(withIdentifier: "com.nomad.app.background"))
        registerBackgroundeTask()

//

        alamofireManager.upload(multipartFormData:{ multipartFormData in
        
        multipartFormData.append((orderId.data(using: String.Encoding.utf8)!),withName: "order_id")
        
        if let choosenImage = DriverDetailsDB.getimageFromPath(imageName:"ticket\(String(describing: orderId)).jpeg") {
            if  let imageData : Data = choosenImage.jpegData(compressionQuality: 0.5) {
                multipartFormData.append(imageData,withName: "image",fileName: "ticket\(String(describing: orderId)).jpeg",mimeType: "image/jpeg")
            }
        }
    },to:serverUrl,method:.post,headers: requestHeader,encodingCompletion: { encodingResult in
                        switch encodingResult {
                        case .success(let upload,_,_):
                            upload.responseJSON(completionHandler: { (responseData) in
                                print(responseData)
                                
                                if let httpResponse = responseData.response,httpResponse.statusCode == 420 {
                                    dispatchQueue.main.async {
                                        failure(ErrorType.versionMismatch)
                                    }
                                }
                                else {
                                    switch responseData.result {
                                    case .success(let value):
                                        if let apiResponse = value as? Dictionary<String,AnyObject> {
                                            if let response = apiResponse["response"] as? Dictionary<String,AnyObject> {
                                                if response["status"] as? String == "success" {
                                                    // success
                                                    print("success status")
                                   //                 endBackgroundTask()
                                                    success("success")
                                                }else{
                                                    // failure
                                                    print("failure status")
                                                    success("failure")
                                                }
                                            }else{
                                                // no status found
                                                print("failure,no status field")
                                                success("failure")
                                            }
                                        }else{
                                            // api response error
                                            print("failure,error response")
                                            success("failure")
                                        }
                                    case .failure(let value):
                                        success("failure")
                                    }
                                }
                            })
                        case .failure(let value):
                            print("failure : \(value)")
                            success("failure")
                        }
    })
}

我想使用Alamofire上传图片。并且我想在应用程序进入后台状态时继续上传过程。这是我使用Alamofire上传图像的代码。 当用户提交要上传的图像后,应用程序进入后台时,我想继续上传过程。我试图在上传时开始后台任务。回到地面后,这是继续我的上传过程的正确方法吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)