- β¨ Features
- π¦ Installation
- βοΈ Setup
- π Usage
- π API Reference
- π οΈ Troubleshooting
- π License
|
|
| Method | Description | Use Case |
|---|---|---|
oneTap() |
One Tap / Credential Manager | Quick sign-in for returning users |
signIn() |
Account Chooser UI | First-time sign-in, account selection |
legacySignIn() |
Legacy OAuth with scopes | Advanced features (Drive, Calendar, etc.) |
signOut() |
Sign out current user | Logout, clear session |
# Using npm
npm install @react-native-auth/google
# Using yarn
yarn add @react-native-auth/googleShow details
Add to your android/gradle.properties:
newArchEnabled=true
kotlin.version=2.1.20Show details
Go to Google Cloud Console and create/select your project.
- Navigate to APIs & Services β Library
- Search for "Google Sign-In API" or "Google Identity"
- Click Enable
You need TWO client IDs:
For app verification (SHA-1 fingerprint required)
-
Go to APIs & Services β Credentials
-
Click Create Credentials β OAuth 2.0 Client ID
-
Select Android
-
Fill in:
-
Name:
Your App (Android) -
Package name:
com.yourapp(fromandroid/app/build.gradle) -
SHA-1 fingerprint: Get it by running:
# Debug keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android # Release keytool -list -v -keystore /path/to/release.keystore -alias your-alias
-
-
Click Create
For authentication (USE THIS IN YOUR CODE)
- Click Create Credentials β OAuth 2.0 Client ID again
- Select Web application
- Fill in:
- Name:
Your App (Web) - Authorized redirect URIs: Leave empty
- Name:
- Click Create
- Copy the Web Client ID β
xxxxx.apps.googleusercontent.com
π‘ Pro Tip: The Android Client ID verifies your app. The Web Client ID is used for authentication.
import { oneTap, signIn, legacySignIn, signOut } from '@react-native-auth/google';Quick authentication for returning users with saved credentials.
const CLIENT_ID = 'YOUR_WEB_CLIENT_ID.apps.googleusercontent.com';
try {
const result = await oneTap({ clientId: CLIENT_ID });
console.log('β
Signed in:', result.idToken);
console.log('π§ Email:', result.email);
} catch (error) {
console.error('β Sign-in failed:', error);
}Display account picker UI for first-time users or account switching.
const result = await signIn({
clientId: CLIENT_ID,
});Advanced authentication with custom OAuth scopes (Drive, Calendar, etc.)
const result = await legacySignIn({
clientId: CLIENT_ID,
scopes: [
'https://www.googleapis.com/auth/drive.readonly',
'https://www.googleapis.com/auth/calendar.readonly',
],
prompt: 'consent', // Optional: Force consent screen
});Controls the authentication flow behavior:
| Value | Behavior |
|---|---|
undefined |
Default behavior - no forced interaction |
'consent' |
Always show consent screen, even for existing app |
'login' |
Always show login screen, force account selection |
'select_account' |
Always show account selection screen |
'none' |
Silent authentication (may fail if no session) |
Example - Force Consent Screen:
const result = await legacySignIn({
clientId: CLIENT_ID,
scopes: ['https://www.googleapis.com/auth/calendar'],
prompt: 'consent', // Useful when updating permissions
});Example - Force Account Selection:
const result = await legacySignIn({
clientId: CLIENT_ID,
prompt: 'select_account', // Always show account picker
});Example - Force Login:
const result = await legacySignIn({
clientId: CLIENT_ID,
prompt: 'login', // Useful for switching accounts
});Sign out the current user and clear the session.
try {
await signOut();
console.log('β
Signed out successfully');
} catch (error) {
console.error('β Sign-out failed:', error);
}type GoogleAuthOptions = {
clientId: string; // Your Web Client ID
scopes?: string[]; // OAuth scopes (legacySignIn only)
prompt?: string; // Consent behavior: 'consent', 'login', 'none'
};
type GoogleAuthResult = {
idToken: string; // JWT ID token
email?: string; // User email (if available)
};Common Issues
- β Verify you're using the Web Client ID, not Android Client ID
- β Check SHA-1 fingerprint is correctly added for Android Client ID
- β Ensure Google Sign-In API is enabled in Console
- β Test on Android 9+ (API level 28+)
- β Ensure Google Play Services is updated
- β Test on a physical device (emulators may have issues)
Made with β€οΈ for React Native