Expo Auth Session+Firebase在Android端谷歌认证报400错误求助
Expo Auth Session + Firebase Google认证Android端400 Invalid Request 解决方案
针对你遇到的iOS正常、Android选择账号后返回400错误的问题,以下是常见排查和解决步骤:
1. 确认Android OAuth客户端的SHA-1指纹配置
Google Android OAuth客户端要求绑定正确的SHA-1签名指纹,Expo开发/构建环境的指纹和本地原生签名不同:
- 开发环境:运行
expo fetch:android:hashes获取SHA-1和SHA-256指纹,将其添加到Google Cloud控制台对应Android OAuth客户端的签名证书指纹列表中。 - EAS构建:在EAS Dashboard的项目构建配置中获取构建用的SHA-1,同样添加到Google Cloud。
2. 配置App Scheme
Expo Auth Session需要Android的Intent Filter来处理认证回调,需在app.json中配置scheme:
{ "expo": { "scheme": "your-app-scheme", // 建议使用包名,比如com.your.bubblechat // 其他配置... "android": { "package": "com.your.bubblechat" } } }
同时确保Google Cloud控制台中该Android OAuth客户端的授权重定向URI包含your-app-scheme://auth(Expo Auth Session默认回调URI)。
3. 完善Google认证请求参数
为useAuthRequest添加必要的权限Scope,缺少核心Scope可能导致请求无效:
const [request, response, promptAsync] = Google.useAuthRequest({ iosClientId: 'xxxxxx.apps.googleusercontent.com', androidClientId: 'xxxxxx.apps.googleusercontent.com', scopes: ['profile', 'email'], // 必须添加的基础Scope });
4. 修正代码中的拼写错误
你代码中credetial是拼写错误,需改为credential:
// 错误 const credetial = GoogleAuthProvider.credential(id_token); // 正确 const credential = GoogleAuthProvider.credential(id_token);
5. 检查OAuth同意屏幕配置
- 如果你的应用是外部用户使用(未发布),需在Google Cloud控制台的OAuth同意屏幕中添加测试用户,确保你测试用的Google账号在列表内。
- 确认同意屏幕的必填字段(如应用名称、隐私政策链接)已完整配置。
6. 验证Firebase配置
确保项目根目录的google-services.json是从Firebase控制台下载的最新版本,其中的client.client_id需和Google Cloud中配置的Android客户端ID一致。
内容的提问来源于stack exchange,提问作者Filip Huhta
相关产品推荐
相关产品推荐

