WatchOS 3 WKApplicationRefreshBackgroundTask didReceiveChallenge

Ich habe es endlich geschafft, meinen WatchOS3-Code zum Starten einer Hintergrund-URL-Sitzungsaufgabe zu veranlassen (ohne den Beispielcode zu beachten, den ich nach "Auftrag erhalten, URL-Sitzung starten" noch nie gesehen habe):

 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()
        }
    }
}

Das Problem, das ich jetzt sehe, ist jedoch, dass meine Delegate-MethodeurlSession:task:didReceiveChallenge: istniemals getroffen werden, daher kann ich meinen Download nicht abschließen. (Ich habe auch die Sitzungslevel-Methode urlSession: didReceiveChallenge: delegate hinzugefügt und sie wird auch nicht getroffen.)

Stattdessen schlug ich sofort meintask:didCompleteWithError: delegate-Methode mit dem Fehler:

"Das Zertifikat für diesen Server ist ungültig. Möglicherweise stellen Sie eine Verbindung zu einem Server her, der vorgibt, ... der Ihre vertraulichen Informationen gefährden könnte."

Hat jemand das Hintergrundupdate für die Uhr erhalten, um mit der zusätzlichen Anforderung zu arbeiten, das @ zu treffedidReceiveChallenge -Methode während der Hintergrund-URL-Sitzung?

Jede Hilfe oder Beratung, die Sie anbieten können, ist willkommen.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage