Expo Go开发与Play Store发布环境下的Google OAuth配置及实现问题
Expo Go开发与Play Store发布环境下的Google OAuth配置及实现问题
作为踩过这个坑的过来人,我给你梳理一套从Expo Go开发到Play Store上线的完整Google OAuth配置流程,分场景拆解,保证你能一步步搞定:
一、开发环境(Expo Go):用Web Client ID快速跑通
Expo Go本质是个通用沙箱容器,所以它的Google登录会走Web OAuth流程,步骤很直接:
- 先去Google Cloud Console创建OAuth 2.0 Web应用客户端ID,授权回调URL填Expo的默认格式:
https://auth.expo.io/@你的Expo用户名/你的项目slug,记得替换成你自己的用户名和项目slug(在app.json的slug字段里找)。 - 项目里安装依赖:
npx expo install expo-auth-session expo-web-browser - 代码里配置Web Client ID,示例如下:
import * as Google from 'expo-auth-session/providers/google'; import * as WebBrowser from 'expo-web-browser'; import { useEffect, Button } from 'react-native'; WebBrowser.maybeCompleteAuthSession(); export default function App() { // 开发环境用Web Client ID const [request, response, promptAsync] = Google.useAuthRequest({ clientId: '你的Web应用客户端ID', scopes: ['profile', 'email'], }); // 处理登录成功后的逻辑 useEffect(() => { if (response?.type === 'success') { const { authentication } = response; // 拿到token后可以传给后端验证,或者直接获取用户信息 } }, [response]); return ( <Button title="用Google登录" onPress={() => promptAsync()} disabled={!request} /> ); }
- 测试前别忘了在Google Cloud的OAuth同意屏幕里把自己的邮箱加为测试用户,不然会弹出“应用未验证”的提示。
二、生产环境必备:获取SHA-1指纹(不用Android Studio也能搞)
这是很多人的卡点,其实Expo提供了两种简单方式,完全不用开Android Studio:
方式1:用EAS Build(推荐,自动化程度高)
如果你用Expo EAS构建生产包,直接在终端跑:
eas credentials
跟着提示选择你的Android项目,就能看到生成的SHA-1指纹;或者直接登录EAS Dashboard,进入项目后找Credentials -> Android,里面会列出所有签名相关信息,包括SHA-1。
方式2:手动管理签名密钥
如果你自己生成了签名密钥(.jks文件),用Java自带的keytool命令在终端执行:
keytool -list -v -keystore 你的密钥库文件名.jks -alias 你的密钥别名
输入密钥库密码后,就能看到SHA-1指纹,复制下来备用就行。
三、生产环境(Play Store):配置Android Client ID与代码适配
创建Android客户端ID:
去Google Cloud Console,创建Android应用客户端ID,填写和你app.json里android.package完全一致的包名,然后把刚才拿到的SHA-1填进去。重点踩坑提醒:如果你的应用用了Google Play的应用签名服务(默认开启),Play Store会用它自己的密钥重新签名你的应用,这时候你得去Play Console的应用签名页面,把Google生成的“应用签名证书”的SHA-1也加到这个Android客户端ID里!我当初就是漏了这一步,上线后登录直接失败,折腾了一晚上才找到原因。
代码适配多环境:
代码里要自动区分开发和生产环境,切换对应的Client ID,比如用环境变量或者直接判断:
import * as Google from 'expo-auth-session/providers/google'; // 区分环境 const isProduction = process.env.NODE_ENV === 'production'; const CLIENT_ID = isProduction ? '你的Android应用客户端ID' : '你的Web应用客户端ID'; const [request, response, promptAsync] = Google.useAuthRequest({ clientId: CLIENT_ID, scopes: ['profile', 'email'], // 生产环境Android不需要额外填redirectUri,Expo会自动处理 });
- 构建生产包:
用EAS Build的话,在eas.json里配置好构建参数,跑eas build -p android --profile production就能生成符合Play Store要求的AAB包;如果是手动构建,确保app.json里的signingConfig指向你的密钥库文件。
四、避坑小贴士
- OAuth同意屏幕:开发阶段选“内部测试”类型,加自己的邮箱当测试用户;生产上线前如果是公开应用,一定要提交同意屏幕的验证,否则普通用户无法登录。
- 依赖兼容:确保
expo-auth-session的版本和你的Expo SDK版本匹配,比如SDK 49对应expo-auth-session ~5.0.2,版本不兼容会导致登录无响应。 - 预发布测试:上线前用EAS构建一个预览包(
eas build -p android --profile preview),安装到真机上测试登录,没问题再上传到Play Store,避免上线后翻车。




