Вы можете ответить только на NSURLAuthenticationChallenge
с учетными данными для этого вызова. Вы можете определить, какой тип задания вы получили, используя:
[[challenge protectionSpace] authenticationMethod]
Возможные значения задокументированы здесь . В случае недействительного сертификата сервера, метод аутентификации будет NSURLAuthenticationMethodServerTrust
. В вашем коде вы должны проверить метод аутентификации и ответить соответствующим образом.
if ([challenge previousFailureCount] > 0) {
// handle bad credentials here
[[challenge sender] cancelAuthenticationChallenge:challenge];
return;
}
if ([[challenge protectionSpace] authenticationMethod] == NSURLAuthenticationMethodServerTrust) {
// check if the user has previously accepted the certificate, otherwise prompt
} else if ([[challenge protectionSpace] authenticationMethod] == /* your supported authentication method here */) {
[[challenge sender] useCredential:/* your user's credential */ forAuthenticationChallenge:challenge];
}
Это не ошибка, если вы не получаете обе проверки подлинности каждый раз. Вы можете кэшировать учетные данные при их создании. Если вы это сделаете, вам не обязательно будет предложено снова.