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
相关产品推荐
相关产品推荐

