Preliminary Checks
Reproduction
https://github.com/eliotgevers/clerk-expo-google-signin-error-repro
Publishable key
pk_test_YXJyaXZpbmctYXBlLTUyLmNsZXJrLmFjY291bnRzLmRldiQ
Description
Steps to reproduce:
- Configure the reproduction with a valid Clerk publishable key and Google web client ID.
- Build and run the Android development build without registering its package name and signing certificate as an Android OAuth client.
- Tap Continue with Google and select an account.
Expected behavior:
The provider/configuration failure is rejected as GOOGLE_SIGN_IN_ERROR, while dismissing the account chooser remains SIGN_IN_CANCELLED.
Actual behavior:
Google Play services reports [16] Account reauth failed. and AndroidX delivers a GetCredentialCancellationException. The native module maps every exception of that type to SIGN_IN_CANCELLED, so @clerk/expo treats the result as an ordinary dismissal and returns no session and no error.
This is not limited to the reproduction’s deliberately invalid OAuth registration. The underlying problem is that the provider uses the cancellation exception type for both explicit user dismissal (Cancelled by user) and non-user failures. The module currently discards that distinction.
The reproduction displays the observable JavaScript result. It also documents the control case: with the Android OAuth client correctly registered, sign-in succeeds; with the chooser dismissed, cancellation remains silent.
Environment
System:
OS: macOS 26.5.1
CPU: (12) arm64 Apple M4 Pro
Binaries:
Node: 25.5.0
pnpm: 10.18.3
bun: 1.3.13
npmPackages:
@clerk/expo: 4.3.0
@clerk/expo-google-signin: 1.0.0
expo: 57.0.13
react: 19.2.3
react-native: 0.86.2
Android:
Emulator: Google Play image, arm64-v8a
API: 36
Preliminary Checks
Reproduction
https://github.com/eliotgevers/clerk-expo-google-signin-error-repro
Publishable key
pk_test_YXJyaXZpbmctYXBlLTUyLmNsZXJrLmFjY291bnRzLmRldiQ
Description
Steps to reproduce:
Expected behavior:
The provider/configuration failure is rejected as GOOGLE_SIGN_IN_ERROR, while dismissing the account chooser remains SIGN_IN_CANCELLED.
Actual behavior:
Google Play services reports [16] Account reauth failed. and AndroidX delivers a GetCredentialCancellationException. The native module maps every exception of that type to SIGN_IN_CANCELLED, so @clerk/expo treats the result as an ordinary dismissal and returns no session and no error.
This is not limited to the reproduction’s deliberately invalid OAuth registration. The underlying problem is that the provider uses the cancellation exception type for both explicit user dismissal (Cancelled by user) and non-user failures. The module currently discards that distinction.
The reproduction displays the observable JavaScript result. It also documents the control case: with the Android OAuth client correctly registered, sign-in succeeds; with the chooser dismissed, cancellation remains silent.
Environment