Estou tendo um problema ao usar uma sessão de URL em segundo plano e a minha willPerformHTTPRedirection
não é chamada:
private class BackgroundCachingDelegate: NSObject, URLSessionDelegate, URLSessionTaskDelegate, URLSessionDownloadDelegate
{
func urlSession(_ session: URLSession, task: URLSessionTask, willPerformHTTPRedirection response: HTTPURLResponse, newRequest request: URLRequest) async -> URLRequest?
{
//... Never gets called
}
}
Eu chamo assim:
private func createNewBackgroundSession()
{
let backgroundCachingConfiguration = URLSessionConfiguration.background(withIdentifier: OfflineCacheService.entityBackgroundSessionIdentifier)
backgroundCachingConfiguration.requestCachePolicy = .reloadIgnoringLocalCacheData
let backgroundCachingDelegate = BackgroundCachingDelegate(/*params*/)
self.backgroundCachingSession = URLSession(configuration: backgroundCachingConfiguration, delegate: backgroundCachingDelegate, delegateQueue: nil)
}
private func startRequest(url: URL)
{
if self.backgroundCachingSession == nil
{
self.createNewBackgroundSession()
}
var request = self.uiViewController.getURLRequest(method: "GET", url: url)
request.cachePolicy = .reloadIgnoringCacheData
self.backgroundCachingSession!.downloadTask(with: request).resume()
}
O código funciona se eu pegar o URL redirecionado diretamente e tentar usá-lo.
Também tenho certeza de que o servidor está executando um redirecionamento:
Alguma ideia?
Atualizar
Talvez também para mencionar que recebo uma resposta de 0 bytes com o URL redirecionado como URL de resposta. Eu poderia ter um caso extremo com base no acima e chamar o novo URL redirecionado, mas preferiria a abordagem correta, se não for essa.
As sessões de URL em segundo plano são gerenciadas pelo sistema operacional, não pelo processo do seu aplicativo. Portanto, existem algumas limitações sobre como eles operam.
Em particular, os redirecionamentos são sempre seguidos
Portanto, o método delegado que não está sendo chamado é o comportamento esperado. Você precisa investigar por que não está obtendo nenhum dado do redirecionamento.