Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Amazon Cognito与SwiftUI_Ios_Swift_Amazon Cognito_Swiftui_Swift5 - Fatal编程技术网

Ios Amazon Cognito与SwiftUI

Ios Amazon Cognito与SwiftUI,ios,swift,amazon-cognito,swiftui,swift5,Ios,Swift,Amazon Cognito,Swiftui,Swift5,我正在考虑开发一个应用程序,并决定使用SwiftUI和AWS Cognito,然而,所有教程似乎都使用故事板-- 如何替换ContentView中的viewDidLoad函数 override func viewDidLoad() { super.viewDidLoad() AWSMobileClient.default().initialize { (userState, error) in if let userState =

我正在考虑开发一个应用程序,并决定使用SwiftUI和AWS Cognito,然而,所有教程似乎都使用故事板--

如何替换ContentView中的viewDidLoad函数

    override func viewDidLoad() {
        super.viewDidLoad()
        AWSMobileClient.default().initialize { (userState, error) in
            if let userState = userState {
                print("UserState: \(userState.rawValue)")
            } else if let error = error {
                print("error: \(error.localizedDescription)")
            }
        }
    }

登录视图由AWSAuthUI包处理。AWS最近进行了一些更改,因此您应该按照文档了解如何使用AWSMobileClient。在您共享的链接中,有一个显示登录的手动调用,在整个示例中,我看不到任何情节提要连接。你试过这个零件吗?如果视图中连接了导航控制器,则应显示登录

func showSignIn() {
    AWSMobileClient.sharedInstance().showSignIn(navigationController: self.navigationController!, { (userState, error) in
        if (error == nil) {
            DispatchQueue.main.async {
                print("User successfully logged in")
            }
        }
    })
}
您还应该确保已将AWSAuthUI吊舱导入到项目中

target 'MyApp' do             ##Replace MyApp with your application name


use_frameworks!
  pod 'AWSMobileClient', '~> 2.12.0'      # Required dependency
  pod 'AWSAuthUI', '~> 2.12.0'            # Optional dependency required to use drop-in UI
  pod 'AWSUserPoolsSignIn', '~> 2.12.0'   # Optional dependency required to use drop-in UI
end
灵感来自:

在ContentView中,根据需要构建视图。在本例中,这两个按钮触发来自AWSMobileClient的默认登录。这里我展示的是Facebook和谷歌

默认的
AWSMobileClient.default().showSignIn(navigationController:…
它是一个navigationController。这就是使用UIViewControllerRepresentable的原因

import SwiftUI
import AWSMobileClient

struct ContentView: View {
    var body: some View {
        let loginView = LoginViewController()
        return VStack {
                ZStack {
                    loginView
                    VStack {
                        Button(action: {
                            loginView.authenticateWithGoogle()
                        }) {
                            Text("Authenticate with Google")
                        }
                        Button(action: {
                            loginView.authenticateWithFacebook()
                        }) {
                            Text("Authenticate with Facebook")
                        }
                    }
                }


        }
    }

}


struct LoginViewController: UIViewControllerRepresentable {

    let navController =  UINavigationController()


    func makeUIViewController(context: Context) -> UINavigationController {
        navController.setNavigationBarHidden(true, animated: false)
        let viewController = UIViewController()
        navController.addChild(viewController)
        return navController
    }

    func updateUIViewController(_ pageViewController: UINavigationController, context: Context) {
    }

    func makeCoordinator() -> Coordinator {
        return Coordinator(self)
    }

    class Coordinator: NSObject {
        var parent: LoginViewController

        init(_ loginViewController: LoginViewController) {
            self.parent = loginViewController
        }
    }

    func authenticateWithGoogle() {
        let hostedUIOptions = HostedUIOptions(scopes: ["openid", "email"], identityProvider: "Google")

        AWSMobileClient.default().showSignIn(navigationController: navController, hostedUIOptions: hostedUIOptions) { (userState, error) in
            if let error = error as? AWSMobileClientError {
                print(error.localizedDescription)
            }
            if let userState = userState {
                print("Status: \(userState.rawValue)")
            }
        }

    }

    func authenticateWithFacebook() {
        let hostedUIOptions = HostedUIOptions(scopes: ["openid", "email"], identityProvider: "Facebook")

        AWSMobileClient.default().showSignIn(navigationController: navController, hostedUIOptions: hostedUIOptions) { (userState, error) in
            if let error = error as? AWSMobileClientError {
                print(error.localizedDescription)
            }
            if let userState = userState {
                print("Status: \(userState.rawValue)")
            }
        }
    }

}

您是否正在尝试实现AWS身份验证/登录窗口?是的,与示例链接中显示的内容类似。