Skip to content

Commit 10a6d90

Browse files
google auth provider update
1 parent f1fcaeb commit 10a6d90

4 files changed

Lines changed: 37 additions & 24 deletions

File tree

FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Services/AuthService.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ public final class AuthService {
112112
]
113113
) }
114114
try safeGoogleProvider.signInWithGoogle(clientID: clientID)
115+
updateAuthenticationState()
115116
} catch {
116117
authenticationState = .unauthenticated
117118
throw error

FirebaseSwiftUI/FirebaseGoogleSwiftUI/Sources/Services/GoogleProviderSwift.swift

Lines changed: 34 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -18,33 +18,45 @@ public class GoogleProviderSwift: @preconcurrency GoogleProviderProtocol {
1818
return GIDSignIn.sharedInstance.handle(url)
1919
}
2020

21-
@MainActor public func signInWithGoogle(clientID: String) {
21+
@MainActor public func signInWithGoogle(clientID: String) async throws -> AuthCredential {
2222
guard let presentingViewController = (UIApplication.shared.connectedScenes
2323
.first as? UIWindowScene)?.windows.first?.rootViewController else {
24-
// "Error: Unable to get the presenting view controller."
25-
return
24+
throw NSError(
25+
domain: "GoogleProviderSwiftErrorDomain",
26+
code: 1,
27+
userInfo: [
28+
NSLocalizedDescriptionKey: "Root View controller is not available to present Google sign-in View.",
29+
]
30+
)
2631
}
2732

2833
let config = GIDConfiguration(clientID: clientID)
2934
GIDSignIn.sharedInstance.configuration = config
30-
31-
GIDSignIn.sharedInstance.signIn(
32-
withPresenting: presentingViewController
33-
) { result, error in
34-
guard error == nil else {
35-
// Handle error
36-
return
37-
}
38-
39-
guard let user = result?.user,
40-
let idToken = user.idToken?.tokenString else {
41-
// Handle error
42-
return
43-
}
44-
45-
let credential = GoogleAuthProvider.credential(withIDToken: idToken,
46-
accessToken: user.accessToken
47-
.tokenString)
48-
}
35+
36+
return try await withCheckedThrowingContinuation { continuation in
37+
GIDSignIn.sharedInstance.signIn(
38+
withPresenting: presentingViewController
39+
) { result, error in
40+
if let error = error {
41+
continuation.resume(throwing: error)
42+
return
43+
}
44+
45+
guard let user = result?.user,
46+
let idToken = user.idToken?.tokenString else {
47+
continuation.resume(throwing: NSError(
48+
domain: "GoogleProviderSwiftErrorDomain",
49+
code: 2,
50+
userInfo: [
51+
NSLocalizedDescriptionKey: "Failed to retrieve user or idToken.",
52+
]
53+
))
54+
return
55+
}
56+
57+
let credential = GoogleAuthProvider.credential(withIDToken: idToken,
58+
accessToken: user.accessToken.tokenString)
59+
continuation.resume(returning: credential)
60+
}
4961
}
5062
}

FirebaseSwiftUI/FirebaseGoogleSwiftUI/Sources/Views/GoogleButtonView.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,6 @@ extension GoogleButtonView: View {
3838
.frame(maxWidth: .infinity)
3939
}
4040
}
41-
Text(errorMessage)
41+
Text(errorMessage).foregroundColor(.red)
4242
}
4343
}

samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/FirebaseSwiftUIExampleApp.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ struct ContentView: View {
4343
let authService: AuthService
4444

4545
init() {
46-
authService = AuthService()
46+
authService = AuthService(googleProvider: googleProvider)
4747
}
4848

4949
var body: some View {

0 commit comments

Comments
 (0)