Я пытаюсь внедрить новый ASWebAuthenticationSession
в MacOS 10.15, и я немного запутался по поводу callbackURLScheme
.
. Заголовочный файл для ASWebAuthenticationSession
говорит:
URL обратного вызова обычно имеет собственную схему URL. Чтобы приложение получило URL-адрес обратного вызова, оно должно либо зарегистрировать пользовательскую схему URL-адреса в своем Info.plist, либо установить в параметре callbackURLScheme схему в инициализаторе.
Поэтому я инициализирую так:
self.webAuthSession = [[ASWebAuthenticationSession alloc] initWithURL:self.authURL
callbackURLScheme:@"myurlscheme://"
completionHandler:^(NSURL * _Nullable callbackURL, NSError * _Nullable error) {
}];
Провайдер oauth, к которому я пытаюсь получить доступ, не поддерживает пользовательские схемы URL, поэтому он настроен на перенаправление на веб-адрес, который, в свою очередь, перенаправляет на мою схему URL.
Итак, после нажатия кнопки «Войти» в моем приложении MacOS Safari открывает окно, позволяющее мне войти в сервис. После успешного входа в систему происходит перенаправление, но веб-страница просто переходит на экран, на котором
Safari не может открыть указанный адрес.
Я вижу, что адресэто myurlscheme://?code=1234567890abcdefgetc...
, что правильно, но, очевидно, он не вызывает обратный вызов ASWebAuthenticationSession
.
Если я добавлю схему URL в список, то в окне сафари появится приглашение с вопросом, хотите ли вы открыть его вмое приложение.
Я знаю, что затем могу получить код из метода application:openURLs:
участника приложения, но это неудобно, с ненужной подсказкой для пользователя, чтобы щелкнуть, а также оставляет окно сафари ASWebAuth...
открытый. Все это должно быть автоматическим через обратный вызов.
Единственный способ получить обратный вызов - это закрыть окно сафари, и в этом случае он перезванивает с ошибкой.