Обработчик завершения сеанса не вызывается для ASWebAuthenticationSession
Я пытаюсь использовать веб-представление ASWebAuthenticationSession. После завершения аутентификации обработчик завершения сеанса не вызывается. Следовательно, веб-представление не отклоняется.
guard let authURL = URL(string: "https://github.com/login/oauth/authorize?client_id=<client_id>/")
else { return }
let scheme = "octonotes"
session = ASWebAuthenticationSession.init(url: authURL, callbackURLScheme: scheme, completionHandler: { callbackURL, error in
// Handle the callback.
print(callbackURL!)
print(error!)
})
session?.presentationContextProvider = self
session?.start()
Я установил схему URL обратного вызова в info.plist. То же самое обновлено в Targets -> info -> URL Types. Выглядит так: Типы URL
После выполнения приведенного выше кода отображается веб-представление ASWebAuthenticationSession, которое предоставляет пользователю страницу входа. После завершения аутентификации веб-просмотр не отключается, в отличие от WKWebView. В верхнем левом углу веб-представления есть опция отмены, она вызывает обработчик завершения с ошибкой.
Есть ли способ закрыть веб-просмотр после завершения сеанса аутентификации?
1 ответ
Похоже, вам не хватает URI перенаправления в вашем authURL, поэтому GitHub не знает, куда перенаправить успешную аутентификацию.
Попробуй это:
let scheme = "octonotes"
guard let authURL = URL(string: "https://github.com/login/oauth/authorize?client_id=<client_id>&redirect_uri=\(scheme)://authcallback")
Имейте в виду, что вам могут не хватать некоторых других параметров, посмотрите здесь другие, которые вы можете предоставить https://developer.github.com/apps/building-oauth-apps/authorizing-oauth-apps/