在Swift中使用Firebase进行Google Auth,而不使用故事板



我正试图让我的应用程序使用一个函数登录谷歌,而不使用谷歌的预构建按钮,而是使用GIDSignIn.sharedInstance().signIn()。然而,它想先设置视图,但我做不到,因为我使用的是没有Storyboards的SwiftUI。

我在一个名为auth()的类中定义了一个gLog()函数,该类存储为authC,然后在按下视图中的按钮时调用authC.gLog(),但它有线程问题,并在此处返回此错误:Thread 1: "presentingViewController must be set."

查看文件(SwiftUI(:

//
//  ContentView.swift
//  maraki-rev1
//
//  Created by Max Webb on 25/10/20.
//
import SwiftUI
// base page name
var pageName: String = "Welcome"
var authC = auth()
struct ContentView: View {
var body: some View {
VStack{
Text(verbatim: data.userFirst)
.font(.title)
.multilineTextAlignment(.center)
Text("Please Log In Below")
.padding()
HStack{
Button(action: {
authC.gLog()
}) {
Text("Log In with Google")
.padding()
}
Button(action: {
authC.aLog()
}) {
Text("Log In with Apple")
.padding()
}
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}

Class包含glog()auth()类的文件。

//
//  authContent.swift
//  maraki-rev1
//
//  Created by Max Webb on 26/10/20.
//
import Foundation
import Firebase
import GoogleSignIn
import SwiftUI
class auth {
// google auth login
func gLog(){
GIDSignIn.sharedInstance().signIn()
}
func aLog(){
print("hello with apple")
}
}

网上没有其他东西可以帮助我,而且他们缺乏关于我的问题的教程,所以我感谢所有关于这个问题的答案和评论。

再次感谢Max

好的,所以最终找到了这个问题的解决方案,发帖帮助其他人,因为这在过去的3个小时里让我头疼!

在我的gLog()函数中包含这段代码可以让应用程序打开谷歌提示登录

if(GIDSignIn.sharedInstance()?.presentingViewController == nil){
GIDSignIn.sharedInstance()?.presentingViewController = UIApplication.shared.windows.last?.rootViewController
}
GIDSignIn.sharedInstance()?.signIn()

在这里找到了这个问题的答案(包括上面的代码片段(:如何正确使用SwiftUI的谷歌登录-信用https://stackoverflow.com/users/3961296/joshua-pogi-28

最新更新