ASWebAuthenticationSession в SWIFTUI - PullRequest
1 голос
/ 20 января 2020

Я пытался выяснить, как интегрировать ASWebAuthenticationSession (чтобы выполнить вход через Oauth) с SwiftUI. Я нигде не могу найти документацию по тому же онлайн, и мне было интересно, может ли кто-нибудь с большим опытом работы с SwiftUI и iOS dev сказать мне, как я могу добиться чего-то в этом направлении. В настоящее время мне нужна система, чтобы кто-то нажимал кнопку «Вход», которая затем открывает ASWebAuthSession и позволяет пользователю войти в систему, прежде чем перенаправить их обратно в мое приложение и загрузить другое представление SwiftUI.

У меня есть в моем ContentView одна кнопка, которая вызывает эту функцию:

func getAuthTokenWithWebLogin() {

    let authURL = URL(string: "https://test-login.blabla.no/connect/authorize?scope=openid%20profile%20AppFramework%20offline_access&response_type=code&client_id=<blalblalba>&redirect_uri=https://integration-partner/post-login")
    let callbackUrlScheme = "no.blabla:/oauthdirect"

    webAuthSession = ASWebAuthenticationSession.init(url: authURL!, callbackURLScheme: callbackUrlScheme, completionHandler: { (callBack:URL?, error:Error?) in

        // handle auth response
        guard error == nil, let successURL = callBack else {
            return
        }

        let oauthToken = NSURLComponents(string: (successURL.absoluteString))?.queryItems?.filter({$0.name == "code"}).first

        // Do what you now that you've got the token, or use the callBack URL
        print(oauthToken ?? "No OAuth Token")
    })

    // Kick it off
    webAuthSession?.start()

}

Но я получаю эту ошибку:

Невозможно запустить ASWebAuthenticationSession без предоставления контекста представления. Установите presentationContextProvider перед вызовом -start.

Как это сделать в SwiftUI? Любые примеры будут фантастичны c!

...