[Swift] Background状態で通信を行う

Background状態とは

アプリを使用している状態はForegroundといいます。アプリを終了すると、アプリはSuspendedになります。
Suspendedではコードを実行することはできませんが、このSuspendedになる前にコードを実行できるのがBackground状態です。

iOS7から用意されたNSURLSessionを使うことでBackground状態で通信処理が行うことができます。 NSURLSessionを使ったプロセスはアプリとは異なるプロセスへ移され、アプリの状態に関係なく通信処理を行います。
なので、アプリが終了されたとしても一連の通信処理を完了させることができます。

Example

func backgroundRequest(){
  let bgID = “backgroundID”
  let configuration:NSURLSessionConfiguration =      NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier(bgID)

  let session = NSURLSession(configuration: configuration, delegate: self, delegateQueue: nil)
  let urlStr = “…”
  let params: [String: AnyObject] = [
                        "user_id":"foo"
                    ]
  let url:NSURL = NSURL(string:urlStr)!
  let request = NSMutableURLRequest(URL: url)  request.HTTPMethod = “POST”
  request.addValue("application/json", forHTTPHeaderField:"Content-Type")


  do {
      try   request.HTTPBody = “POST”
      NSJSONSerialization.dataWithJSONObject(params,               
      options: NSJSONWritingOptions.PrettyPrinted)
      let task = session.downloadTaskWithRequest(request)
      task.resume()
 }catch{
 }
}

func URLSession(session: NSURLSession, didBecomeInvalidWithError error: NSError?) {
	//failed
        session.finishTasksAndInvalidate()
}
    
func URLSessionDidFinishEventsForBackgroundURLSession(session: NSURLSession) {
	//success
        session.finishTasksAndInvalidate()
}

Related Contents

Pickup Contents