2016-11-10 62 views
2

當ios應用程序使用URLSession轉到後臺狀態時,是否有任何可能的方式來完成web服務任務? 我不是試圖上傳一個巨大的文件到服務器,而是我試圖上傳一個4位密鑰。 我已經嘗試了下面的方法進行後臺任務。在後臺狀態下完成webservice iOS

var bgTask = UIApplication.shared.beginBackgroundTask(expirationHandler: {}) 

爲了測試目的,我在一個循環中調用webservice並進行了記錄。當我進入後臺模式時,web服務調用卡住了。

+0

可能重複的[Swift - 在後臺下載NSURLSession?](http://stackoverflow.com/questions/33503164/swift-nsurlsession-downloading-in-background) –

+1

你也可以看看這個問題:http ://stackoverflow.com/questions/40395810/downloading-in-background-and-waking-app-when-finished/40395988#40395988 – pbodsk

回答

0
class func generalPost(url: String, postCompleted : (response: String) ->()) { 
     let request = NSMutableURLRequest(URL: NSURL(string: url)!) 
     let session = NSURLSession.sharedSession() 
     request.HTTPMethod = "POST" 
     let dataString = "" 
     request.HTTPBody = dataString.dataUsingEncoding(NSUTF8StringEncoding) 

     let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in 
      let strData = NSString(data: data!, encoding: NSUTF8StringEncoding)      

      postCompleted(response: strData)     
     }) 
     task.resume() 
    } 

你也可以使用

generalPost(url: "http://stackoverflow.com/") { (response) in 
      dispatch_async(dispatch_get_main_queue(), {() -> Void in 
       UIAlertView(title: "Message", message: response, delegate: nil, cancelButtonTitle: "Ok").show()     
      }) 
     } 
+0

謝謝你的答案,但它不是那個即時通訊尋找的那個。應用程序從活動狀態轉移到後臺狀態。 – good4pc

0

大的上傳/下載文件

在iOS的7

介紹這真的取決於任務的多少需要時間。如果它是一個大的下載或上傳任務(例如下載視頻),您應該使用帶有後臺配置的NSURLSession執行任務。 iOS系統將處理上傳/下載任務。下載完成後,下載的文件將被保存到臨時文件中(因此您可能需要稍後將其複製到其他位置)。 Downloading in background and waking app when finished

普通的WebServices(我認爲這是你想要的)

介紹了在iOS 6中

對於有限長度的操作,您可以使用beginBackgroundTaskWithExpirationHandler。

var task = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler(){} 
//do your job (call the service) 
//on completion you shouldcall the bellow two lines 
UIApplication.sharedApplication().endBackgroundTask(task) 
task = UIBackgroundTaskInvalid 

不需要配置帶有後臺配置的NSURLSession。

+0

是的..我正在尋找正常的web服務。我做了和你一樣的發佈,我做了一個web服務調用循環來檢查這個場景。但是當應用程序移動到背景時,它會卡住。建立設置 - >功能 - >後臺模式 - >後臺獲取 – good4pc

+0

無需啓用後臺獲取。當你得到Web服務調用的結果時,你應該調用'endBackgroundTask'。我再次告訴你,這應該只用於非常快速的Web服務。你能分享你的代碼嗎? – ELKA

+1

我建議觀看這個WWDC視頻:[後臺抓取](https://developer.apple.com/videos/play/wwdc2013/204/)還有一個與NSURLSession相關的視頻。兩者都將幫助您瞭解應用程序在進入後臺時的運行方式 – ELKA