我正在嘗試使用 SwiftUI 設定最新的 GoogleSignIn。Firebase 官方檔案提供了為 UIKit、ViewControllers 和 AppDelegate 設計的過時方法,因此根本無法找出使其作業所需的解決方法。我能夠實作 UIApplicationDelegateAdaptor 來訪問 didFinishLaunchingWithOptions 方法來配置 FirebaseApp 和 GIDSignIn。在遵循此檔案的同時:https : //firebase.google.com/docs/auth/ios/google-signin我最終堅持了第 4 步。目前還不清楚我必須在哪里使用此代碼或如何將其集成到 SwiftUI 范式中:
guard let clientID = FirebaseApp.app()?.options.clientID else { return }
// Create Google Sign In configuration object.
let config = GIDConfiguration(clientID: clientID)
// Start the sign in flow!
GIDSignIn.sharedInstance.signIn(with: config, presenting: self) { [unowned self] user, error in
if let error = error {
// ...
return
}
guard
let authentication = user?.authentication,
let idToken = authentication.idToken
else {
return
}
let credential = GoogleAuthProvider.credential(withIDToken: idToken,
accessToken: authentication.accessToken)
// ...
}
我知道谷歌的這個指南:https : //developers.google.com/identity/sign-in/ios/quick-migration-guide但沒有如何正確執行的代碼示例。
uj5u.com熱心網友回復:
您可能希望作為用戶執行操作的結果來運行該代碼。Button例如,按下 a 后。
棘手的部分將是需要GIDSignIn.sharedInstance.signInaUIViewController作為其presenting引數,這在 SwiftUI 中不一定直接。您可以使用 aUIViewControllerRepresentable來獲取您可以從中呈現的層次結構中對視圖控制器的參考。
class LoginManager : ObservableObject {
var viewController : UIViewController?
func runLogin() {
guard let viewController = viewController else {
fatalError("No view controller")
}
//Other GIDSignIn code here. Use viewController for the `presenting` argument
}
}
struct DummyViewController : UIViewControllerRepresentable {
var loginManager : LoginManager
func makeUIViewController(context: Context) -> some UIViewController {
let vc = UIViewController()
loginManager.viewController = vc
return vc
}
func updateUIViewController(_ uiViewController: UIViewControllerType, context: Context) {
}
}
struct ContentView : View {
@StateObject private var loginManager = LoginManager()
var body: some View {
VStack(spacing: 0) {
Button(action: {
loginManager.runLogin()
}) {
Text("Login")
DummyViewController(loginManager: loginManager)
.frame(width: 0, height: 0)
}
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/313638.html
