ASWebAuthenticationSession в MacOS 10.15 (Каталина) - PullRequest
1 голос
/ 03 октября 2019

Я пытаюсь внедрить новый 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...открытый. Все это должно быть автоматическим через обратный вызов.

Единственный способ получить обратный вызов - это закрыть окно сафари, и в этом случае он перезванивает с ошибкой.

...