ios - 亚马逊 Cognito 与 SwiftUI

标签 ios swift amazon-cognito swiftui swift5

我正在考虑开发应用程序并决定使用 SwiftUI 和 AWS Cognito,但是,所有教程似乎都使用 Storyboard -- Example

如何替换 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)")
            }
        }
    }

最佳答案

灵感来自:SwiftUI - How to access UINavigation Controller from NavView

在您的 ContentView 中,根据需要构建您的 View 。在此示例中,两个按钮触发从 AWSMobileClient 的默认登录。在这里,我展示了 Facebook 和 Google。

默认 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)")
            }
        }
    }

}

关于ios - 亚马逊 Cognito 与 SwiftUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59038583/

相关文章:

ios - AWS 无法订阅 SNS 主题 : CognitoIdentityCredentials is not authorized to perform: SNS:Subscribe

ios - Swift 'WKInterfaceLabel' 没有名为 'text' 的成员

ios - 在应用程序准备好销售后编辑 5.5 屏幕、4.0 屏幕、3.5 屏幕和 iPad 屏幕的屏幕截图

ios - 添加 watchkit 时带有 cocoapods 新错误的 Swift 项目

ios - 所有在已失效的前一个计时器之后运行的 NSTimer 都会停止执行,而不是继续运行

node.js - 如何在 AWS Cognito 的用户池中获取用户的额外属性

ios - NSKeyedArchiver archivedDataWithRootObject 在传递图像模型数组时返回 nil

ios - 我不能在 Storyboard 中同时将标题和图像设置到导航栏上的右侧栏项吗?

ios - 创建事件后将信息推送到 firebase(Firebase-Realtime-Database)

amazon-web-services - AWS Cognito - 如何创建备份?