Expo托管应用生产构建中Google认证Android端失败
Expo 47 Android Google认证返回{"type":"dismiss"}无法获取id_token的解决方案
以下是针对该问题的具体排查和解决步骤:
1. 核对Android客户端ID配置
- 确保Google Cloud Console中创建的Android OAuth 2.0客户端ID的包名与
app.json里expo.android.package完全一致 - 确认客户端ID关联的SHA-1指纹正确:发布版APK必须使用发布密钥的SHA-1,调试版用debug.keystore的SHA-1,可通过
keytool -list -v -keystore 你的密钥库文件获取指纹,更新到Google Cloud配置中 - 检查
app.json里的expo.android.googleServicesFile是否指向正确的google-services.json,该文件中的client_id需与Android客户端ID匹配
2. 修正expo-auth-session参数配置
- 使用
useIdTokenAuthRequest时,必须明确传入androidClientId(Google Cloud生成的Android专用客户端ID,不能混用Web/iOS的ID) - 确保
scopes包含openid,这是获取id_token的必要权限,示例配置:
const [request, response, promptAsync] = useIdTokenAuthRequest( { androidClientId: "你的Android客户端ID", iosClientId: "你的iOS客户端ID", scopes: ['openid', 'email', 'profile'], }, {} );
3. 配置Android Intent过滤与重定向URI
- 在
app.json中添加对应Google认证的Intent过滤,确保回调链接能被APP捕获:
"android": { "package": "com.your.app.package", "intentFilters": [ { "action": "VIEW", "data": [ { "scheme": "com.your.app.package", "host": "oauthredirect", "pathPrefix": "/google" } ], "category": ["BROWSABLE", "DEFAULT"] } ] }
- 同时在Google Cloud Console的Android客户端ID配置中,添加重定向URI:
com.your.app.package:/oauthredirect/google
4. 适配Expo 47版本兼容性
- 确保
expo-auth-session版本与Expo 47兼容,推荐使用~3.8.0版本,避免版本不匹配导致的异常 - 不要手动指定
redirectUri,让Expo自动生成,确保与Intent过滤配置一致
5. 排查发布版APK的特殊问题
- 不要用Expo Go测试发布版场景,Expo Go的包名与你的APP不一致,会导致认证回调失败,必须生成正式APK/AAB安装到设备测试
- 检查设备的Google Play服务是否为最新版本,旧版本可能引发认证流程异常
内容的提问来源于stack exchange,提问作者Mahesh Samudra
相关产品推荐
相关产品推荐

