Я аутентифицирую наш веб-сервис, используя ASWebAuthenticationSession
, и по какой-то причине единственным вариантом после окончательного перенаправления является Отмена . Раньше у меня это работало, и даже если я нажал Отмена, URL-адрес обратного вызова был отправлен через обработчик завершения, и я смог там проанализировать форму токена. Но теперь я просто получаю ошибку ASWebAuthenticationSessionErrorCodeCanceledLogin
.
Как мне заставить ASWebAuthenticationSession
показать кнопку Готово и завершить обработчик с URL обратного вызова? Что-то изменилось или сломалось в последнем обновлении iOS?
Как создать сеанс
if (@available(iOS 12.0, *)) {
self.session = [[ASWebAuthenticationSession alloc]
initWithURL:@"http://service.com"
callbackURLScheme:@"http://website.com"
completionHandler:_sessionHandler];
[self.session start];
}
Обработчик завершения
_sessionHandler = ^(NSURL * _Nullable callbackURL, NSError * _Nullable error) {
NSLog(@"Callback Url: %@, Error: %@", callbackURL, error);
if ( callbackURL != nil ) {
__block NSString * token = [weakSelf webToken:@"token" fromUrl:callbackURL];
weakSelf.completionHandler([weakSelf parseWebToken:token], error);
}
else
weakSelf.completionHandler(nil, error);
};
Выход
URL обратного вызова: (ноль), ошибка: ошибка Домен = com.apple.AuthenticationServices.WebAuthenticationSession Code = 1 "(ноль)"
Как я уже говорил, это работало ранее, и я не уверен, где это сломалось. Тестовый сервис, который я использовал, не изменился, поэтому мне интересно, находится ли он в фреймворке или мне не хватает чего-то еще.
Должен ли веб-сервис отправлять определенный заголовок обратно в окончательный URL-адрес, чтобы ASWebAuthenticationSession
показывал кнопку Готово и завершал обработчик с помощью URL-адреса?