You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Bare Workflow中AuthSession始终返回400 invalid_request求助

Android Google登录在Expo Bare Workflow(自定义原生代码)中解决invalid_request错误

核心问题定位

你遇到的invalid_request错误本质是Google Cloud控制台配置的redirect_uri和应用实际使用的redirect_uri不匹配,哪怕字符有细微差异都会触发该错误。

分步解决方案

1. 精确配置Google Cloud的OAuth重定向URI

  • 打开Google Cloud控制台,找到你的Android OAuth客户端,在「授权重定向URI」中添加完全匹配的地址:com.myproject.myproject:/oauthredirect(即错误提示中显示的URI)
  • 注意:这里必须使用应用的包名作为前缀,而非app.json里expo.scheme的值,除非你特意将scheme设置为包名。

2. 正确配置useAuthRequest的redirectUri

无需手动硬写固定值,用makeRedirectUri动态生成可确保一致性:

import { makeRedirectUri } from 'expo-auth-session';
import Constants from 'expo-constants';

// 在useAuthRequest中配置
const [request, response, promptAsync] = useAuthRequest(
  {
    clientId: '你的Android ClientId',
    scopes: ['email', 'profile', 'openid'],
    // 动态生成匹配包名的redirectUri
    redirectUri: makeRedirectUri({
      native: `${Constants.expoConfig.android.package}:/oauthredirect`,
    }),
  },
  discovery
);

若不手动配置,useAuthRequest默认会生成{包名}:/oauthredirect,只要确保Google Cloud中已配置该值即可。

3. 补全Android原生配置(自定义原生代码必做)

由于使用了自定义原生代码,需确保AndroidManifest.xml中存在处理该redirect_uri的intent-filter:

<manifest ...>
  <application ...>
    <!-- 其他activity配置 -->
    <activity
      android:name="com.google.android.gms.auth.api.signin.GoogleSignInActivity"
      android:exported="true">
      <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <!-- scheme必须和应用包名完全一致 -->
        <data android:scheme="com.myproject.myproject" />
      </intent-filter>
    </activity>
  </application>
</manifest>

该配置用于让Android系统识别:当Google OAuth回调到com.myproject.myproject:/oauthredirect时,需打开你的应用。

4. 清除缓存并重新构建

  • 卸载设备上的旧应用,避免缓存的旧配置干扰
  • 用eas credentials -p android再次确认SHA-1指纹,确保与Google Cloud OAuth客户端中的指纹完全一致
  • 重新构建并安装应用

常见疑问解答

  • Bare Workflow中是否必须重定义redirectUri?
    不需要,只要默认生成的{包名}:/oauthredirect已在Google Cloud配置好即可。若要自定义,必须保证应用与Google Cloud两端的redirectUri完全一致。
  • redirectUri的格式到底是包名还是expo.scheme?
    在自定义原生代码的Bare Workflow中,必须使用应用包名作为scheme前缀,除非你特意修改原生配置让scheme指向其他值。

已有大量开发者在Bare Workflow+自定义原生代码的项目中成功实现Google登录,核心就是保证redirect_uri的两端匹配,以及原生配置的完整性。

内容的提问来源于stack exchange,提问作者Matija Martic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 08:38:14