Ho un'app iOS che interagisce con un server che esegue Rails ed è stabile e affidabile da 3 anni. Il server richiede la certificazione Basic e SSL, e ha funzionato perfettamente fino a iOS 7 incluso.Errore di autenticazione di base con iOS 8
Tuttavia, ora sto vedendo problemi di autenticazione con i dispositivi con iOS 8. Dispositivi/simulatori in esecuzione < iOS 8 continuano a funziona bene
Durante l'inizializzazione dell'app, c'è una raffica di richieste di dati da sincronizzare con il server che deve passare l'autenticazione di base.
Questi risultato nella seguente metodo delegato chiamato,
willSendRequestForAuthenticationChallenge
... e il problema si verifica perché questi sono sfidati senza fine - il codice non riesce deliberatamente al secondo tentativo, quando [sfida previousFailureCount]> 0 (il percorso del codice segue la pratica standard chiamando cancelAuthenticationChallenge se previousFailureCount> 0) - vedi sotto.
Ho registrato gli ID di sfida, e questi sono diversi attraverso ogni sfida, anche quando il previousFailureCount> 0.
- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodHTTPBasic])
{
if ([challenge previousFailureCount] == 0)
{
NSURLCredential *newCredential;
newCredential = [NSURLCredential credentialWithUser:MY_USERNAME
password:MY_PASSWORD
persistence:NSURLCredentialPersistenceForSession]; // Retain for rest of session
[[challenge sender] useCredential:newCredential forAuthenticationChallenge:challenge];
}
else
{
[[challenge sender] cancelAuthenticationChallenge:challenge];
// ...error will be handled by connection didFailWithError
}
}
}
Se ho knock out la chiamata a controllare la previousFailureCount, ci sono infinite invocazioni di il metodo di sfida.
Tuttavia, una volta fallita questa raffica di guasti, le successive e successive "singole" NSUrlRequests vengono autenticate correttamente.
Ancora, questo problema è specifico per iOS 8. Qualche idea sul perché una successione "veloce" di richieste di autenticazione non riuscirebbe in iOS 8, ma funziona in iOS 7?
Grazie.
Mostrare il codice completo per la connessione method ': willSendRequestForAuthenticationChallenge:'. – CouchDeveloper
@CouchDeveloper Fatto, grazie per il vostro interesse. – Snips
Sto riscontrando lo stesso problema, tuttavia è associato alle attività e ai download di NSURLSession. Non riesco a capire come scoprire quanti errori ci sono per un _task_. E non in totale. Non riesco a trovare alcun modo per farlo ora che la variabile previousFailureCount si comporta diversamente. – Salx