Обработчик завершения сеанса не вызывается для 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/

Другие вопросы по тегам