React Native Expo应用安卓端谷歌登录重定向至Google.com问题排查
安卓谷歌登录重定向问题排查与解决方案(React Native Expo + Firebase)
问题背景
- 安卓应用因下架重命名包名,导致iOS与安卓包名不一致
- 仅安卓设备在谷歌登录时出现重定向至Google.com的问题,怀疑由包名差异引发
现有配置与代码
app.config.js 配置
"slug": "iosBundle2023", "scheme": "iosBundle2023", ... "ios": { "bundleIdentifier": "com.myMobileApp.iosBundle2023", "infoPlist": { "CFBundleDisplayName": "iosBundle2023" }, ... }, "android": { "package": "com.myMobileApp.androidBundleNew", ... } }
登录代码
import * as Google from 'expo-auth-session/providers/google' import { GoogleAuthProvider, signInWithCredential } from 'firebase/auth' const [request, response, promptAsync] = Google.useIdTokenAuthRequest({ webClientId: Constants.expoConfig?.extra?.GOOGLE_WEB_ID, clientId: Constants.expoConfig?.extra?.GOOGLE_CLIENT_ID, iosClientId: Constants.expoConfig?.extra?.GOOGLE_IOS_ID, androidClientId: Constants.expoConfig?.extra?.GOOGLE_ANDROID_ID, scopes: ["profile", "email"] }) useEffect(() => { if (response?.type === 'success') { fetchUserInfo(response.authentication.accessToken) } }, [response]) async function fetchUserInfo(token) { const credential = GoogleAuthProvider.credential(null, token) signInWithCredential(auth, credential) .then((userCredential) => { // User is signed in with Firebase, you can access user data here }) .catch((error) => { // Handle any errors that occur during sign-in }) }
排查方向与解决方案
1. 谷歌云平台配置校验
- 确认安卓OAuth 2.0客户端ID对应的包名是更新后的
com.myMobileApp.androidBundleNew,在谷歌云控制台「API和服务→凭据」中找到对应客户端ID,检查包名匹配情况 - 同步更新安卓客户端ID的SHA-1指纹,若更新包名后重新生成了应用签名,需确保指纹信息与当前应用一致
- 为新包名创建独立的OAuth 2.0客户端ID,避免复用旧包名的配置
2. Expo配置调整
- 检查
app.config.js中安卓package字段是否确实为新包名,无拼写错误 - 确保环境变量
GOOGLE_ANDROID_ID指向新包名对应的谷歌客户端ID,而非旧ID
3. Expo Auth Session配置优化
- 在
Google.useIdTokenAuthRequest中,移除通用clientId配置,仅保留androidClientId和iosClientId,避免通用ID干扰安卓端逻辑 - 若自定义了重定向URI,需确保安卓端格式为
com.myMobileApp.androidBundleNew:/oauth2redirect/google,并与谷歌控制台配置一致
4. Firebase控制台同步
- 在Firebase控制台「身份认证→登录方法→谷歌登录」中,添加新包名对应的安卓客户端ID,或更新现有客户端ID的包名信息
- 检查Firebase项目的OAuth重定向URI列表,确认包含安卓端的正确重定向地址
5. 测试注意事项
- 卸载安卓端旧应用,清除Expo Go缓存,避免旧配置残留
- 执行
expo prebuild生成原生项目文件,检查安卓AndroidManifest.xml中包名和intent过滤器配置是否正确
内容的提问来源于stack exchange,提问作者Hamaad Fahim
相关产品推荐
相关产品推荐

