ASWebAuthenticationSession в MacOS 10.15 (Catalina)
Я пытаюсь внедрить новый 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-адресов в список, то в окне сафари отобразится запрос, спрашивающий, хотите ли вы открыть его в моем приложении.
Я знаю, что затем могу получить код из App Delegate application:openURLs:
метод, но это неудобно, имеет ненужное приглашение для пользователя щелкнуть, а также оставляет ASWebAuth...
окно сафари открыто. Все это должно происходить автоматически через обратный вызов.
Единственный способ вызвать обратный вызов - закрыть окно сафари, и в этом случае он обратится с ошибкой.
2 ответа
Я только что вернулся к этому, чтобы попробовать еще раз, и, похоже, он отлично работает на MacOS 10.15.1
а также 10.15.2 beta
.
Я заметил, что callbackURLScheme
параметр не должен включать ://
Я не могу вернуться и снова протестировать его на 10.15
но я счастлив использовать это сейчас, предполагая, что все на 10.15
обновился бы до 10.15.1
Даррен прав в MacOS, вы должны удалить:// из callbackURLScheme. iOS работает нормально независимо от того, // вы или нет. Однако в MacOS Catalyst, похоже, есть ошибка. Мое приложение фокусируется, когда я вхожу в систему, но не получает обратного вызова. Пока не нашел способа это исправить.