func signInWithGoogle() async throws {
presenter = WebAuthSessionPresenter() // Keep a strong reference
let oauthURL = try await supabase.auth.getOAuthSignInURL(
provider: .google, scopes: "email profile openid",
redirectTo: URL(string: "com.domain.appname://auth/callback")!
)
print("oauthURL: \(oauthURL.absoluteString)")
let session = ASWebAuthenticationSession(
url: oauthURL,
callbackURLScheme: "com.domain.appname"
) { [weak self] url, error in
defer {
// Clean up after flow completes
self?.presenter = nil
self?.webAuthSession = nil
}
if let error {
print("Auth Error: \(error)")
return
}
guard let url else { return }
Task {
do {
print("url: \(url.absoluteString)")
try await supabase.auth.session(from: url)
print("Google sign-in success")
} catch {
print("Failed to start session: \(error)")
}
}
}
session.presentationContextProvider = presenter
session.prefersEphemeralWebBrowserSession = true // optional: avoid Safari cookies
webAuthSession = session // Keep reference alive
session.start()
}
func signInWithGoogle() async throws {
presenter = WebAuthSessionPresenter() // Keep a strong reference
let oauthURL = try await supabase.auth.getOAuthSignInURL(
provider: .google, scopes: "email profile openid",
redirectTo: URL(string: "com.domain.appname://auth/callback")!
)
print("oauthURL: \(oauthURL.absoluteString)")
let session = ASWebAuthenticationSession(
url: oauthURL,
callbackURLScheme: "com.domain.appname"
) { [weak self] url, error in
defer {
// Clean up after flow completes
self?.presenter = nil
self?.webAuthSession = nil
}
if let error {
print("Auth Error: \(error)")
return
}
guard let url else { return }
Task {
do {
print("url: \(url.absoluteString)")
try await supabase.auth.session(from: url)
print("Google sign-in success")
} catch {
print("Failed to start session: \(error)")
}
}
}
session.presentationContextProvider = presenter
session.prefersEphemeralWebBrowserSession = true // optional: avoid Safari cookies
webAuthSession = session // Keep reference alive
session.start()
}