I have had the same issue, have managed to get it working using expo-dev-client.

I didn't find a way to fix this for Expo Go - not sure if there is one currently. It seems like using Oauth google login on IOS, currently requires building the app.

Once you configure the build, you can use

import { makeRedirectUri } from 'expo-auth-session';

to get the correct redirect URL.

const [request, response, promptAsync] = Google.useAuthRequest({
 clientId: 'xxxx',
 iosClientId:
        'xxxx',
 redirectUri: makeRedirectUri()});

Also remember to generate IOS credentials in the google console.

Answer from bonbonvoyage on Stack Overflow
🌐
Expo Documentation
docs.expo.dev › versions › latest › sdk › auth-session
AuthSession - Expo Documentation
Config used to exchange an authorization code for an access token. ... Represents an OAuth authorization request as JSON. ... Options passed to the promptAsync() method of AuthRequests. This can be used to configure how the web browser should look and behave. Type: Omit<AuthSessionOpenOptions, 'windowFeatures'> extended by: ... Options passed to makeRedirectUri. ... Object returned after an auth request has completed. If the user cancelled the authentication session by closing the browser, the result is { type: 'cancel' }.
🌐
Medium
medium.com › @gbenleseun2016 › guide-to-sign-in-with-google-on-the-expo-platform-using-expo-auth-session-9d3688d2107a
Guide to sign In with Google On the Expo platform using expo-auth-session. | by Seun Gbenle | Medium
September 6, 2023 - Navigate to your project directory ... -config @react-native-async-storage/async-storage · “expo-auth-session”- command will manage the sign in with google, “expo-crypto” is a peer dependency and must be installed ...
🌐
Expo Documentation
docs.expo.dev › guides › google-authentication
Using Google authentication - Expo Documentation
A guide on using @react-native-google-signin/google-signin library to integrate Google authentication in your Expo project.
🌐
GitHub
gist.github.com › jdthorpe › aaa0d31a598f299a57e5c76535bf0690
expo-auth-session example · GitHub
const endpoint = "https://accounts.google.com/o/oauth2/v2/auth"; const clientId: any = GOOGLE_WEB_CLIENT_ID; const redirectUri: any = REDIRECT_URI; const [discovery, setDiscovery] = useState({}); useEffect(() => { async function loadDiscovery() { // here is the issue causing promise rejection const getDiscovery = await fetchDiscoveryAsync(endpoint).then((discovery) => setDiscovery({ discovery })); // nothing is displayed in console console.log("get getDiscovery >>>>>> " + JSON.stringify(getDiscovery)); } loadDiscovery(); }, []); const [request, response, promptAsync] = useAuthRequest({ clientI
🌐
Expo Documentation
docs.expo.dev › guides › authentication
Authentication with OAuth or OpenID providers - Expo Documentation
Instead, most providers now support the authorization code with PKCE (Proof Key for Code Exchange) extension to securely exchange an authorization code for an access token within your client app code. Learn more about transitioning from Implicit flow to authorization code with PKCE. expo-auth-session still supports Implicit flow for legacy code purposes.
🌐
Reddit
reddit.com › r/expo › expo auth session, google oauth and android
r/expo on Reddit: Expo Auth Session, Google OAuth and Android
May 6, 2025 -

I've been trying to set up google oauth for the android version of the application that I'm building. Below you will find a code snippet of the initial set up that I had. I have gone through several iterations of how I've been setting up the code to work with the android version however the error that I keep getting is a URI redirect mismatch. I understand what the error means but I'm not sure what I'm doing wrong.

In the google developers console in the android section, there are 3 inputs where I can enter information.

name: this doesn't matter AFAIK
Package.name: I've tried to set this either the scheme in my app.json or the android.package name
SHA-1 Fingerprint certificate: I got this value from doing eas credentials.

I'm fairly certain that I'm screwing up the package.name input.

App.json scheme: com.john-doe.mobile-client

android.package: com.john-doe.appname_android

Im going to make the scheme and the package name the same then will rebuild. I will probably need to update the sha-1 fingerprint certificate also after a rebuild. Once the build is done I'll come back to update this but I'm honestly stumped.

import { useAuthRequest } from "expo-auth-session/providers/google";

WebBrowser.maybeCompleteAuthSession();
const [request, response, promptAsync] = useAuthRequest({
        androidClientId:
            "myadroid-client-id.apps.googleusercontent.com",
        iosClientId:
            "myios-client-id.apps.googleusercontent.com",
    });

    // refactor this to not use useEfffect.
    useEffect(() => {
        if (response?.type === "success") {
            const { authentication } = response;
            const accessToken = authentication?.accessToken;

            if (accessToken) {
                saveAuthToken(accessToken)
                    .then(() => refreshSession())
                    .then(() => router.push("/"))
                    .catch((error) => {
                        console.error("Error saving token:", error);
                    });
            }
        }
    }, [response]);
Find elsewhere
🌐
Expo Documentation
docs.expo.dev › develop › authentication
Authentication in Expo and React Native apps - Expo Documentation
Once the user is authenticated, you need to think about how to store, restore, and validate their session. ... Traditionally, cookies are used to store sessions on the web, while JSON Web Tokens (JWTs) are common in native applications. The above tutorials demonstrate exactly how to handle this. After receiving the ID token from a provider like Google or Apple, you generate a custom JWT on the server using Expo API Routes.
🌐
DEV Community
dev.to › angela300 › login-with-google-on-react-native-expo-3h9n
Login with Google on React Native Expo - DEV Community
March 18, 2024 - Hit create and on the pop up screen that comes up, copy the client ID an paste it your App.js file for later use That was the most difficult part, now we can start creating the code for the application In app.js, import WebBrowser: Import * as WebBrowser from “expo-web-browser” Initialize the WebBrowser with this command: WebBrowser.maybeCompleteAuthSession(); Also add this import in your app.js: Import * as Google from “expo-auth-session/providers/google” To save the information of the user when they sign in so that they do not have to sign in again, we will use async storage: Import
🌐
GitHub
github.com › expo › expo › issues › 18270
expo-auth-session with Google login problems in Development build on android · Issue #18270 · expo/expo
July 16, 2022 - const config = { expoClientId: "some value", iosClientId: "some value", androidClientId: "some value", }; const [user, setUser] = useState(null); const [request, response, googlePromptLogin] = Google.useAuthRequest(config); const SignInWithGoogle = async () => { googlePromptLogin().then(async (response) => { if (response.type === "success") { const credential = GoogleAuthProvider.credential( null, response.authentication.accessToken ); await signInWithCredential(auth, credential); } }); return Promise.reject(); }; useEffect(() => { onAuthStateChanged(auth, (user) => { if (user) { setUser(user); } else { setUser(null); } }); }), [];
Published   Jul 16, 2022
🌐
CodeSandbox
codesandbox.io › examples › package › expo-auth-session
expo-auth-session examples - CodeSandbox
Use this online expo-auth-session playground to view and fork expo-auth-session example apps and templates on CodeSandbox.
🌐
GitHub
github.com › expo › expo › blob › main › packages › expo-auth-session › src › providers › Google.ts
expo/packages/expo-auth-session/src/providers/Google.ts at main · expo/expo
* Defaults to `true` on installed apps (Android, iOS) when `ResponseType.Code` is used (default). ... * Extends [`AuthRequest`](#authrequest) and accepts [`GoogleAuthRequestConfig`](#googleauthrequestconfig) in the constructor.
Author   expo
🌐
YouTube
youtube.com › watch
Expo Auth Session for Google Authentication on React Native Apps - YouTube
Hi everyone!SKIP INTRO and go straight to code: 2:28Today I am going to talk about Expo AuthSession with the Google provider and some drawbacks it has, speci...
Published   February 5, 2022
🌐
GitHub
github.com › expo › expo-google-sign-in
GitHub - expo/expo-google-sign-in: Source code for the deprecated expo-google-app-auth package. Deprecated in favor of expo-auth-session and @react-native-google-signin/google-signin
Source code for the deprecated expo-google-app-auth package. Deprecated in favor of expo-auth-session and @react-native-google-signin/google-signin - expo/expo-google-sign-in
Author   expo
🌐
GitHub
github.com › expo › expo › issues › 13642
Expo-auth-session for Google with server-side flow · Issue #13642 · expo/expo
July 15, 2021 - I wanted to ask if it's possible to use expo-auth-session for Google and send the code to my backend server to exchange it for access token. Currently I'm receiving invalid_grant error from Google APIs, but when I tweak the expo-auth-ses...
Published   Jul 15, 2021
🌐
GitHub
github.com › expo › expo › issues › 21084
[expo-auth-session] I'm unable to sign in with Google on Android · Issue #21084 · expo/expo
February 3, 2023 - Summary I'm using the expo-auth-session in order to allow the Google social login in my app. The problem is that only works on iOS, and I don't know why it is not working on Android, and I ...
Published   Feb 03, 2023
🌐
Reddit
reddit.com › r/expo › google sign in works on expo go but it doesn't work on standalone app
r/expo on Reddit: Google sign in works on expo go but it doesn't work on standalone app
January 29, 2024 -

Hello everyone, im trying to implement google sign in to my app, but i cant make it work on my build (expo go is working). So far i've tried enabling custom uri schemes on google console but after signin nothing happens, the app just keeps on loading. I've tried adding a redirectUri but that gets me the error "Error 400: invalid_request", Details: "redirec_uri=exp://my-slug-here". So my question is, how can i set up this properly? Any help is really appreciated, here's my code:

import * as WebBrowser from "expo-web-browser";
import * as Google from "expo-auth-session/providers/google";
import * as AuthSession from 'expo-auth-session';

const redirectUri = AuthSession.makeRedirectUri({
useProxy: false,
native: 'exp://slug-here',
});
const [request, response, promptAsync] = Google.useIdTokenAuthRequest({
clientId:
"clientId",
androidClientId: "androidId",
redirectUri
});

🌐
npm
npmjs.com › package › expo-auth-session
expo-auth-session - npm
Expo module for browser-based authentication. Latest version: 7.0.10, last published: 10 days ago. Start using expo-auth-session in your project by running `npm i expo-auth-session`. There are 74 other projects in the npm registry using expo-auth-session.
      » npm install expo-auth-session
    
Published   Dec 05, 2025
Version   7.0.10
Author   650 Industries, Inc.