Helped me through, despite not being the same problem the use the URL quote helped me solve this by changing a bit how I thought about it!

The final result became a little too big to paste here, but the handling ended up being relatively straightforward:

  useEffect(() => {
    if (result?.type === "success") {
      const { token, iv } = getParamsFromUrl(result.url)

      const session = decrypt(token, key, iv)
      console.log({ session })
    }
  }, [result])
🌐
Expo Documentation
docs.expo.dev › guides › authentication
Authentication with OAuth or OpenID providers - Expo Documentation
Learn how to utilize the expo-auth-session library to implement authentication with OAuth or OpenID providers.
🌐
Expo Documentation
docs.expo.dev › versions › latest › sdk › auth-session
AuthSession - Expo Documentation
A universal library that provides an API to handle browser-based authentication. ... AuthSession enables web browser-based authentication (for example, browser-based OAuth flows) in your app by utilizing WebBrowser and Crypto.
🌐
Better Auth
better-auth.com › docs › integrations › expo
Expo Integration | Better Auth
Social Authentication Support: enables social auth flows by handling authorization URLs and callbacks within the Expo web browser.
🌐
Expo Documentation
docs.expo.dev › versions › latest › sdk › webbrowser
WebBrowser - Expo Documentation
A promise which fulfils with WebBrowserMayInitWithUrlResult object. ... This will be done using a "custom Chrome tabs" browser, AppState, and Linking APIs. Opens the url with Safari in a modal using ASWebAuthenticationSession.
🌐
Expo Documentation
docs.expo.dev › develop › authentication
Authentication in Expo and React Native apps - Expo Documentation
Expo AuthSession is a client-side package that helps you open a web browser or native modal to start the OAuth login flow.
🌐
npm
npmjs.com › package › expo-auth-session
expo-auth-session - npm
AuthSession is the easiest way to implement web browser based authentication (for example, browser-based OAuth flows) to your app, built on top of expo-web-browser.
      » npm install expo-auth-session
    
Published   Dec 05, 2025
Version   7.0.10
Author   650 Industries, Inc.
Find elsewhere
🌐
Reddit
reddit.com › r/reactnative › expo auth google with web browser
r/reactnative on Reddit: Expo auth google with web browser
October 7, 2023 -

Is there any way to authenticate through Google using webview or expo-web-browser?

Because I don't want to touch the native files (ios - android)

🌐
Expo
auth.expo.io
Expo AuthSession Redirect Proxy
https://auth.expo.io/@<account-name>/<project-name> Due to web browser changes like WebKit's Tracking Prevention, the AuthSession proxy service may not work reliably in edge cases such as when a user's device is configured to block cookies or prevent cross-site tracking.
🌐
GitHub
gist.github.com › jdthorpe › aaa0d31a598f299a57e5c76535bf0690
expo-auth-session example · GitHub
I'm still facing blank page and an error after entering Google account login even if I use WebBrowser.maybeCompleteAuthSession();: Something went wrong trying to finish signing in. Please close this screen to go back to the app. Do you know why? I remember Expo Go asked me for permission to access external link before open Google's authentication screen on my old login method using AuthSession.startAsync({ authUrl }) (SDK 48) and now it doesn't ask me anymore.
🌐
Stack Overflow
stackoverflow.com › questions › 75263907 › how-to-handle-auth-with-webbrowser-openauthsessionasync-in-expo
react native - How to handle Auth with WebBrowser.openAuthSessionAsync in Expo? - Stack Overflow
I'm trying to figure out how to have access to any kind of info from the return, from cookies to query string on the URL as I have control over how my API handles the return, but I'm not being able to access any kind of info from the AuthSession. ... import { useEffect, useState } from "react" import { Button, View, Text } from "react-native" import * as WebBrowser from "expo-web-browser" import * as Linking from "expo-linking" export default () => { const [result, setResult] = useState<WebBrowser.WebBrowserAuthSessionResult | null>(null) useEffect(() => { console.log(result) }, [result]) cons
🌐
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 - “expo-auth-session”- command will manage the sign in with google, “expo-crypto” is a peer dependency and must be installed alongside expo-auth-session, “expo-web-browser” will enable you sign in to google without leaving the application.
🌐
Descope
descope.com › blog › post › expo-authentication
Add Authentication to an Expo App With Descope
Now that you’ve been introduced to Expo and why Descope might be the right authentication solution for your Expo apps, we'll dive into the practical aspects of implementing Expo authentication with Descope. As a note, instead of following along with the instructions below, you can also take a look at our sample app. ... First, ensure you have Expo CLI installed. If not, you can install it using npm install -g expo-cli. Create a new Expo project using npx create-expo-app YourProjectName, and navigate to your project directory. Install necessary packages such as expo-web-browser, expo-auth-session, and others using npm or yarn.
🌐
Expo Documentation
docs.expo.dev › router › advanced › authentication
Authentication in Expo Router - Expo Documentation
With Expo Router, all routes are always defined and accessible. You can use runtime logic to redirect users away from specific screens depending on whether they are authenticated. There are two different techniques for authenticating users within routes.
🌐
GitHub
github.com › expo › expo › blob › master › docs › pages › versions › unversioned › sdk › webbrowser.md
expo/docs/pages/versions/unversioned/sdk/webbrowser.md at master · expo/expo
expo-web-browser provides access to the system's web browser and supports handling redirects. On iOS, it uses SFSafariViewController or SFAuthenticationSession, depending on the method you call, and on Android it uses ChromeCustomTabs.
Author   expo
🌐
GitHub
github.com › expo › expo › issues › 10982
[expo-web-browser] Clear authSession for expo-web-browser · Issue #10982 · expo/expo
November 10, 2020 - [expo-web-browser] Clear authSession for expo-web-browser #10982 · Copy link · Labels · WebBrowserstale · VladCherniavsky · opened · on Nov 10, 2020 · Issue body actions · Hi all! Seems as there is an issue with expo-web-browser dismissing session. Currently I am using await WebBrowser.openAuthSessionAsync(authUrl, redirectUrl); to allow users to input their login credentials.
Published   Nov 10, 2020
🌐
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
🌐
Reddit
reddit.com › r/expo › expo auth closes auth webview on app switcher
r/expo on Reddit: Expo Auth closes Auth Webview on App Switcher
September 30, 2025 -

Update 2: For anyone who comes across this later, the solution to get it all working nicely was adding ‘createTask: false’ in the options of the auth request (keeps the auth browser alive and in the same instance) plus “experimentalLauncherActivity: true” in the app.config for expo-web-browser (for re-opening app via the icon).

Update: It seems to be an issue with expo-web-browser itself rather than auth specifically. Tested opening a simple web page with expo-web-browser and when going to the app switcher it dismisses that opened web page instance.

This Expo PR seems to suggest it's fixed (and can see these changed in my node_modules), but isn't working for me.

-------------------------------------------------------------

We have implemented our authentication using 'expo-auth-session' that then opens up an Azure auth page to register/sign in.

The issue is that on Android, if you press ||| to go to the app switcher (e.g. when going to email app to get verification code), the auth webview window (which appears as a new 'app instance' in the switcher) gets automatically dismissed immediately on press of the ||| button.

It animates upwards as if it were swiped away, so doesn't seem to be crashing but deliberately dismissing.

iOS behaves perfectly fine, the auth webview page seems to open up within the same 'app instance' and remains there.

Tried the `experimentalLauncherActivity": true` option from the docs but that didn't seem to help at all.

Any ideas?