Ios Amazon Cognito与SwiftUI
我正在考虑开发一个应用程序,并决定使用SwiftUI和AWS Cognito,然而,所有教程似乎都使用故事板-- 如何替换ContentView中的viewDidLoad函数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 =
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身份验证/登录窗口?是的,与示例链接中显示的内容类似。