Expo React Native中Google登录报INVALID_CREDENTIAL_OR_PROVIDER_ID问题
排查Expo React Native中Google登录Firebase验证失败的问题
根据你提供的错误信息(INVALID_CREDENTIAL_OR_PROVIDER_ID)和代码,以下是具体的排查步骤:
1. 验证Google Sign-In返回的Token有效性
在获取userInfo后立即打印字段,确认idToken和accessToken是否存在且不为空:
const userInfo = await GoogleSignin.signIn(); console.log('Google返回的用户信息:', userInfo); // 检查idToken、accessToken字段
错误响应中显示id_token和access_token参数为空,说明Google Sign-In可能未正确返回有效凭证,这是导致Firebase验证失败的直接原因。
2. 检查Expo环境下的Google Sign-In配置
- 确保
app.json/app.config.js中正确配置了Google服务文件路径:{ "expo": { "android": { "googleServicesFile": "./google-services.json" }, "ios": { "googleServicesFile": "./GoogleService-Info.plist" } } } - 登录Google Cloud Console,确认OAuth 2.0客户端ID配置:
- Android端:添加Expo调试环境的SHA-1哈希值(通过
expo fetch:android:hashes命令获取),生产环境添加自己的签名哈希。 - iOS端:客户端ID的Bundle ID必须与Expo配置中的
ios.bundleIdentifier完全一致。
- Android端:添加Expo调试环境的SHA-1哈希值(通过
- 确认Firebase控制台的Authentication > 登录方法中,Google登录已启用,且关联的OAuth客户端ID与Cloud Console中的一致。
3. 调整Firebase Credential的创建方式
Firebase的GoogleAuthProvider.credential方法仅需传入idToken即可(accessToken为可选参数),尝试简化代码:
const googleCredential = auth.GoogleAuthProvider.credential(userInfo.idToken); // 不再传入accessToken await auth().signInWithCredential(googleCredential);
若accessToken无效或为空,会干扰Firebase的凭证验证逻辑。
4. 确认库的兼容性(Expo环境关键)
@react-native-google-signin/google-signin依赖原生代码配置,Expo Go应用无法直接兼容该库,必须通过以下方式解决:
- 切换到Expo官方支持的
expo-auth-session或expo-google-sign-in库实现Google登录; - 构建Expo Dev Client(自定义调试客户端),将原生依赖打包进去后再测试。
内容的提问来源于stack exchange,提问作者Alex Wilson
相关产品推荐
相关产品推荐

