Expo 49迁移后Android端Google登录遇Firebase网络认证错误求助
解决Expo 49 Android端Google登录auth/network-request-failed错误
以下是针对问题的排查与修复方案:
1. 补全Android端GoogleSignin配置
当前GoogleSignin.configure仅配置了web和iOS客户端ID,Android端需额外添加对应客户端ID,否则会导致认证请求路由异常:
GoogleSignin.configure({ webClientId: Constants.expoConfig?.extra?.googleWebClientId, iosClientId: Constants.expoConfig?.extra?.googleiOSClientId, androidClientId: Constants.expoConfig?.extra?.googleAndroidClientId, // 新增此项 })
googleAndroidClientId可从google-services.json的client[0].client_info.android_client_info.client_id字段获取,确保与Firebase控制台中Android应用的配置一致。
2. 修正Firebase模拟器的Android访问地址
Android模拟器无法直接通过localhost/127.0.0.1访问本地主机服务,需使用专属环回地址10.0.2.2映射主机localhost:
if (__DEV__) { const origin = '10.0.2.2'; // 替换原有origin逻辑 console.log('Origin: ', origin) auth.useEmulator(`http://${origin}:9099/`) firestore.useEmulator(origin, 8080) storage.useEmulator(origin, 9199) functions.useEmulator(origin, 5001) }
同时确认Firebase模拟器服务正在运行,且主机防火墙未阻止9099等端口的连接。
3. 检查Expo预构建配置
Expo 49预构建后,需确保google-services.json正确放置在android/app/目录,且app.json中配置了Google服务插件:
{ "expo": { "plugins": [ "@react-native-google-signin/google-signin", [ "@react-native-firebase/app", { "androidGoogleServicesFile": "./google-services.json" } ] ] } }
执行npx expo prebuild --clean重新生成Android项目文件,确保配置生效。
4. 临时禁用Firestore长轮询测试
当前启用的experimentalForceLongPolling可能在Android模拟器网络环境下引发连接问题,临时禁用后验证:
// 注释或删除该行配置 // firebaseApp.firestore().settings({ experimentalForceLongPolling: true, merge: true })
若问题解决,再重新评估是否需要启用该配置。
5. 确认Android网络权限
检查android/app/src/main/AndroidManifest.xml中是否包含必要网络权限:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Expo预构建通常会自动添加,可手动确认配置完整性。
内容的提问来源于stack exchange,提问作者TreyBCollier
相关产品推荐
相关产品推荐

