:WatchOS 3 WKApplicationRefreshBackgroundTask didReceiveChallenge
func handle(_ backgroundTasks: Set<WKRefreshBackgroundTask>) {
for task in backgroundTasks {
if let refreshTask = task as? WKApplicationRefreshBackgroundTask {
// this task is completed below, our app will then suspend while the download session runs
print("application task received, start URL session")
let request = self.getRequestForRefresh()
let backgroundConfig = URLSessionConfiguration.background(withIdentifier: NSUUID().uuidString)
backgroundConfig.sessionSendsLaunchEvents = true
backgroundConfig.httpAdditionalHeaders = ["Accept":"application/json"]
let urlSession = URLSession(configuration: backgroundConfig, delegate: self, delegateQueue: nil)
let downloadTask = urlSession.downloadTask(with: request)
print("Dispatching data task at \(self.getTimestamp())")
downloadTask.resume()
self.scheduleNextBackgroundRefresh(refreshDate: self.getNextPreferredRefreshDate())
refreshTask.setTaskCompleted()
}
else if let urlTask = task as? WKURLSessionRefreshBackgroundTask {
//awakened because background url task has completed
let backgroundConfigObject = URLSessionConfiguration.background(withIdentifier: urlTask.sessionIdentifier)
self.backgroundUrlSession = URLSession(configuration: backgroundConfigObject, delegate: self, delegateQueue: nil) //set to nil in task:didCompleteWithError: delegate method
print("Rejoining session ", self.backgroundUrlSession as Any)
self.pendingBackgroundURLTask = urlTask //Saved for .setTaskComplete() in downloadTask:didFinishDownloadingTo location: (or if error non nil in task:didCompleteWithError:)
} else {
//else different task, not handling but must Complete all tasks (snapshot tasks hit this logic)
task.setTaskCompleted()
}
}
}
그러나, 지금보고하고있는 문제는 내 대리자 메서드가 urlSession:task:didReceiveChallenge:
이 이 충돌되고 있지 않습니다, 그래서 내 다운로드가 완료 될 때까지 얻을 수 있다는 것입니다. (또한 세션 수준 urlSession : didReceiveChallenge : delegate 메서드를 추가했으며 또한 적중되지 않았습니다.)
task:didCompleteWithError:
대리자 메서드 명중 :.
"이 서버에 대한 인증서가 유효을 당신은 당신의 기밀을 넣을 수있는 ... 척하는 서버에 연결할 수 있습니다 정보 위험에. "
백그라운드 URL 세션 중에 didReceiveChallenge
메서드를 사용하는 추가 요구 사항을 사용하기 위해 백그라운드 감시 업데이트를받은 사람이 있습니까?
제공 할 수있는 도움이나 조언을 보내 주시면 감사하겠습니다.
BTW이 코드는 유효하지 않은 인증서 오류가 발생하지 않는 프로덕션 상자에서 백그라운드 새로 고침을 위해 잘 작동합니다. (Xcode 8.1 with WatchOS3) – CodenameDuchess
이것은 실제로 작동합니까? 다운로드가 완료되면 WKURLSessionRefreshBackgroundTask가 수신됩니까? – ian
네,이게 우리에게 효과적입니다. 세션을 만들 때 자신을 위임자로 지정해야합니다. 또한 WKURLSessionRefreshBackgroundTask 블록이 필요하다는 점에 유의하십시오 (중단 점으로 충돌하지 않을 수도 있음). 해당 블록에서 작업을 완료하지 말고 해당 블록을 잡고 완료 한 후 didFinishDownloadingTo 또는 didCompleteWithError 대리자 메서드 논리를 완료 한 후에 작업을 완료하십시오. – CodenameDuchess