> ## Documentation Index
> Fetch the complete documentation index at: https://docs.portalhq.io/llms.txt
> Use this file to discover all available pages before exploring further.

# loginWithGoogle

> Returns the Google authorize URL for you to open in a browser of your choice. Does not open the browser itself.

**Function Signature**

```swift theme={null}
public func loginWithGoogle() async throws -> AuthorizeUrlResult
```

A `PortalAuth` method. Fetches a fresh authorize URL from Portal and returns it; your app opens it (for example with `UIApplication.shared.open`) and later forwards the redirect to [`handleRedirect`](./portalauthhandleredirect). For a flow that also owns the browser, use [`signInWithGoogle`](./portalauthsigninwithgoogle).

**Returns**

* **`AuthorizeUrlResult`**: Contains the following:
  * **`authorizeUrl`**: `String`, the Google authorize URL, trimmed of surrounding whitespace.

**Throws**

* `PortalAuthError.authMethodUnavailable(.google)`: Google is not enabled for this auth environment. Not retryable; check `getMethods()`.
* `PortalAuthError.accountAbstractionUnavailable(message:)`: `isAccountAbstracted: true` was requested but gas sponsorship is not enabled or configured.
* `PortalRequestsError.unauthorized`: The `redirectUrl` is not on the environment's allow list, the Auth Environment ID does not match an environment with authentication switched on, or an enabled provider is missing its credentials in the dashboard. That last case fails the call for every provider, not only the misconfigured one.
* Other transport errors unchanged.

**Notes**

* Call it on every tap and **never cache the result**. The URL embeds a single-use `state` shared by both provider URLs in one backend response, so a stale URL fails at the provider with no useful message.
* The redirect arrives through the OS: `onOpenURL` in SwiftUI, or your scene or app delegate in UIKit. This path works with an `https://` Universal Link redirect, which is the recommended production setup for redirect-based flows because another app cannot claim it; see [Register your redirect](../guide/client-auth#register-your-redirect).
* If the user cancels at Google, Portal redirects to your `redirectUrl` with `?error=oauth_failed`, which `handleRedirect` throws as `PortalAuthError.authenticationFailed(error:)`.
* Available starting from SDK version 8.0.0.

**Example Usage**

```swift theme={null}
import UIKit
import PortalSwift

func openGoogleInBrowser() async {
    do {
        let authorize = try await auth.loginWithGoogle()

        guard let url = URL(string: authorize.authorizeUrl) else {
            print("The authorize URL could not be parsed.")
            return
        }
        await UIApplication.shared.open(url)
        // Forward the redirect that comes back to auth.handleRedirect(url).
    } catch PortalAuthError.authMethodUnavailable(let method) {
        print("\(method.rawValue) is not enabled for this auth environment.")
    } catch {
        print("Error starting Google sign-in: \(error)")
    }
}
```

**Related Documentation**

* [signInWithGoogle reference](./portalauthsigninwithgoogle)
* [handleRedirect reference](./portalauthhandleredirect)
* [Google or Apple in your own browser](../guide/client-auth#google-or-apple-in-your-own-browser)
* [Google OAuth](../../../resources/authentication/google-oauth)
